Позвольте тесту пройти набор пробного метода JMock - PullRequest
0 голосов
/ 11 января 2019

Есть ли способ в JMock2 пропустить тест при достижении выполнения вызова метода данного макета? Другими словами, я хотел бы написать тестовый код, например:

assertTrue(when(aRequestMock).methodCall());

Для проверки производственного кода, например:

public void methodUnderTest(){
   // Some initialization code and members call
   request.foo();
   String a = anotherInstance.bar();
   // many more calls to follow
}

... так что мне не нужно было бы имитировать 'anotherInstance.bar()' возвращаемое значение, равно как и любой другой ложный вызов?

Я знаю, что это не будет представлять какую-либо строгую проверку и не может считаться лучшей практикой, однако это пригодится при тестировании методов с длинным списком методов членов.

1 Ответ

0 голосов
/ 14 января 2019

Данный код:

public void methodUnderTest(){
   request.foo();
   anInstance.bar();
   yetAnotherInstance.baz();
}

вы не можете пропустить выполнение bar() и baz() после вызова foo(). Позвольте мне также сказать, что вы не хотите этого делать, потому что даже если вы можете пропустить его в тесте, он все равно будет выполняться в производстве, так что вам лучше его тоже протестировать: -)

Ближайшее, что вы можете сделать, это

context.checking(new Expectations() {{
    oneOf(requestMock).foo();
    ignoring(anInstanceMock).bar();
    ignoring(yetAnotherInstanceMock).baz();
}});

Здесь я использую oneOf() в первой строке, потому что foo() - фокус вашего теста. Вы также можете упростить это, не упоминая bar() и baz():

context.checking(new Expectations() {{
    oneOf(requestMock).foo();
    ignoring(anInstanceMock);
    ignoring(yetAnotherInstanceMock);
}});

Однако имейте в виду, что при этом вы будете игнорировать любой вызов метода для anInstanceMock и yetAnotherInstanceMock.

...