私は転送メソッドを持つクラスを持っていますfoo
:
void foo( Concrete c, String s ) { c.bar( s ); }
foo
実際に前進するかどうかをテストしたいと思います。私にとって残念なことに、Concrete
これはサードパーティライブラリのクラスであり、インターフェイスではなく具象型です。したがってClassImposteriser
、モックを作成するにはJMockで使用する必要Concrete
があるため、テストケースでは次のようにします。
@Test
public final void testFoo() {
Mockery context = new JUnit4Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
final Concrete c = context.mock(Concrete.class);
final String s = "xxx" ;
// expectations
context.checking(new Expectations() {{
oneOf (c).bar(s); // exception gets thrown from here
}});
new ClassUnderTest.foo( c, s );
context.assertIsSatisfied();
}
残念ながら、Concrete.bar
順番にスローするメソッドを呼び出します。そのメソッドは最終的なものなので、オーバーライドすることはできません。さらに、その行をコメントアウトしても、が呼び出されnew ClassUnderTest.foo( c, s );
たときではなく、JMockが例外を設定したときに例外がスローさfoo
れます。
ClassUnderTest.foo
では、そのメソッドがどのように転送されるかをテストするにはどうすればよいConcrete.bar
ですか?
編集:
はい、バーは最終です。
私の解決策は一般的なものではありませんが、サードパーティライブラリの「Tester」クラスを使用して正しく設定することでしたConcrete
。