TDDの範囲でリファクタリングを明確にしたいと思います。前「きれいな」JUnitテストを書くためのリファクタリング
:
class Somclass{
public void sendMessage(){
WebServiceStub stub = new WebServiceStub();
...
stub.sendMsg();
}
}
後:
class Somclass{
private WebServiceStub stub;
public void sendMessage(){
...
if(stub == null){
stub = new WebServiceStub();
}
...
stub.sendMsg();
}
}
だから私はSENDMSG()メソッドを検証し、いくつかは、結果と主張するようにしたいです。このスタブをモックする可能性を持たせるために、このスタブローカル変数をインスタンス変数に移動します。だから私は嘲笑スタブをクラスに設定し、テストクラスで検証とアサートを行うことができます。例:
@Test
public void testSMth(){
wsProvider.setStub(stubMock);
verify(stubMock).sendMsg();
...asserts
}
このアプローチはスレッドの安全性ではないため、並行性の変更を行う必要があります。この変更は間違いを引き起こす可能性があります。したがって、ローカル変数approceではスレッドが安全です。
また、WebServiceStubのインスタンスを返すFactoryを作成することもできます。しかし、この状況は頻繁に起こるため、このアプローチは新しいクラスを生み出します。
質問があります:どのようにこのケースをテストし、間違いの原因となる可能性があるgootテストのコスト変更ですか?
生成されたWebServiceクラスを参照するには、「スタブ」を使用して自分自身と他のすべての人を混乱させることができます。私はこれが頻繁に使用されていることを知っていますが、単体テストの文脈では、「スタブ」はまったく異なるものを意味します。 – artbristol