2
私はサプライヤを使用して、synchronizedメソッドへの連続呼び出しを避けながらフィールドスレッドをインスタンス化しています。Mockitoとの機能インタフェースを介してメソッド呼び出しを確認する方法は?
class MyClass extends AbstractClassWithContext {
Supplier<Foo> fooGetter;
Foo foo;
public MyClass() {
this.fooGetter = this::initFoo;
}
Foo getFoo(){
return fooGetter.get();
}
synchonized Foo initFoo(){
if(Objects.isNull(this.foo)) {
this.foo = getContext().getFoo();
}
this.fooGetter =() -> this.foo;
return this.foo;
}
}
ユニットテストを実行しているときに、initFoo()が一度呼び出されていることを確認します。悲しいことに、verify(classUnderTest, times(1)).initFoo()
は、initFooが入力されたことを登録しません。私はこれをデバッグし、getFoo()
を呼び出してinitFooを入力します。
アイデア?
フィールド宣言に割り当てを移しましたが、結果は変わりません。 –
@ ChristophGrimmer-Dietrichそれは状況を変えないからです。 'spy(new MyClass());の後の呼び出しのみが登録されます。 – zeroflagL
情報ありがとうございます。さて....私はこれをどのように修正するのですか? :-D –