У меня есть метод, который выглядит примерно так:
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 и устанавливаю для него ожидания, что, когда его значение будет проверено по отношению к нулевому значению, оно вернет true и что метод someMethod () никогда не вызывается. 1007 *
В данный момент тест не пройден, так как jMock говорит, что невозможно переопределить методы, предоставляемые классом Object (равная (нулевая) часть).
Есть ли способ сделать это с помощью jMock? Имеет ли этот шаблон смысл? Это действительный тест? Если нет, есть ли у кого-нибудь предложения о том, как это проверить?