SpringのコントローラーテストをJmockで作成します。コントローラは、データベース操作にインターフェイスを使用します。これらはサービスクラスです。それらをjmockして、setterを介してテストでコントローラーに渡すことができます。
実際のコントローラーには、@Reource-anotationでマークされたサービスがあります
@Resourceプライベートサービスサービス;
最終的なサービスサービスをテストする=context.mock(Service.class); controller.setService(service); controller.CallMethodToTest();
コントローラコードでは、サービスオブジェクトは通常、Springの@Resourceアノテーションで初期化されます。問題は、コントローラがバリデーターや内部クラスなどの内部呼び出しで同じサービスを使用する場合です。
実際のバリデーターには、@Reource-anotationでマークされたサービスもあります
@Resourceプライベートサービスサービス;
テストでは、たとえばバリデーターオブジェクトを導入し、それにサービスを設定してコントローラーに渡すことができます。
MyValidator validator = new MyValidator();
validator.setService(service);
controller.setValidator(validator);
バリデーターとしましょう。検証はservice.getSomethingを呼び出します。getSomething();のExpectationsを作成する必要がありました。コントローラでは、同じメソッドを呼び出すこともできます。
context.checking(new Expectations() {
{
allowing(service).getSomething();
will(returnValue(mockData));
}
});
カーディナリティを許可しているにもかかわらず、このような状況は
allowed, already invoked 1 time
これは一般的なシナリオであり、これ以上具体的なコードを提供することはできません。これは、コントローラーとバリデーターの両方のサービスメソッド呼び出しと関係があると思います。誰かがこれを修正するためのヒントを教えてもらえますか?