次のようなメソッドがあります。
public void myMethod(MyClass c)
{
if (c == null)
{
return;
}
try
{
c.someMethod();
}
catch (SomeException e)
{
// log the exception, possibly re-throw
}
}
MyClass パラメーター c のモック インスタンスをセットアップして、それ自体が null の値を返し、 c.someMethod() が呼び出されないようにする方法を見つけようとしています。私の単体テストは次のようになります。
@Test
public void Test_myMethod_With_Null_MyClass_Does_Not_Call_someMethod()
{
Mockery mockery = new Mockery()
{{
setImposteriser(ClassImposteriser.INSTANCE);
}};
final MyClass mockMyClass = mockery.mock(MyClass.class);
try
{
mockery.checking(new Expectations()
{{
oneOf(mockMyClass).equals(null);
will(returnValue(true));
never(mockMyClass).someMethod();
}});
}
catch (Exception e)
{
logger.fatal(e);
fail("Exception thrown in test.");
}
Util.myMethod(mockMyClass);
}
基本的に、私は MyClass のモック インスタンスを設定し、その値が null 値に対してテストされると true を返し、メソッド someMethod() が呼び出されないという期待を設定しています。
jMock は、Object クラス (equals(null) 部分) によって提供されるメソッドをオーバーライドすることはできないと述べているため、現在、テストは失敗しています。
jMockでこれを行う方法はありますか? このパターンは意味がありますか?これは有効なテストですか?そうでない場合、これをテストする方法について何か提案はありますか?