TDDの範囲でリファクタリングを明確にしたい。
前:
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 テストは間違いを引き起こす可能性のある変更にコストがかかりますか?