Я относительно новичок в мире PowerMock / EasyMock, и что-то, что я думал, должно быть относительно простым, просто не работает.Возможно, кто-то может показать мне, где я ошибаюсь.
Рассмотрим эти два класса:
public class Foo
{
public int doStuff(int a)
{
return (5 / a);
}
}
public class Bar
{
public void doSomething()
{
Foo foo = new Foo();
int c = foo.doStuff(0);
}
}
Теперь в тестовом классе я хочу протестировать метод Bar doSomething.У меня проблема с использованием Foo.Как видите, передача 0 в Foo приведет к ошибке деления на ноль.Я хотел бы заглушить / подавить Foo.doStuff (), чтобы этого не произошло.Все, что мне действительно нужно, это убедиться, что doStuff () действительно вызывается.Итак, я сделал это:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Foo.class })
public class TestStuff
{
@Test
public void testOtherStuff() throws Exception
{
Foo fooMock = PowerMock.createMock(Foo.class);
expectNew(Foo.class).andReturn(fooMock);
EasyMock.expect(fooMock.doStuff(anyInt())).andReturn(1);
//fooMock.doStuff(anyInt());
//suppress (method(Foo.class, "doStuff"));
replayAll();
Bar bar = new Bar();
bar.doSomething();
verifyAll();
}
}
Когда я запускаю это, я получаю исключение деления на ноль.Я думал, что использование вызова ожидаем () и указание возвращаемого значения 1 предотвратит выполнение метода.Это явно не тот случай.Итак, первый вопрос: почему бы и нет?
Итак, я попытался сделать утверждения, которые закомментированы выше.То есть, я закомментировал вызов функции wait () и использовал два других оператора, полагая, что мне нужно подавить выполнение метода.Я обнаружил, что если бы я не делал оператор suppress (), я всегда получал бы исключение деления на ноль.Тем не менее, имея там оператор подавления, я получаю assertionerror, где говорится, что doStuff должен был быть вызван 1 раз, а фактические вызовы были 0.
Итак, почему метод не считаетсякак выполнено?
Как заставить фиктивный материал «заглушить» метод, чтобы он считался исполняемым, на самом деле ничего не делает?
Ситуация, с которой я имел делос фактически имеет пустое возвращение на doStuff.Чем отличаются необходимые фиктивные операторы для обработки методов без возвращаемого значения по сравнению с теми, которые делают?
Кажется, я на пороге создания этой работы, но я чувствую, что у меня есть какой-то виднеправильной комбинации утверждений, которые здесь пробуют.Я ударился головой об этом, прочитал кучу примеров, и я все еще терплю неудачу.
Любая помощь?
Спасибо,
Крейг