#scala #unit-testing #scalamock
Вопрос:
С помощью Mockito и других платформ тестирования обычно существуют способы имитировать функциональность метода в тестовом классе. Похоже, я не мог заставить СкалаМока принять это таким же образом.
class A {
def methodUnderTest()
def methodUsedInMethodUnderTest()
}
Затем в тестовом классе я:
(A.methodUsedInMethodUnderTest _)
.expects.....
a.methodUnderTest shouldEqual ..
Я знаю, что если вы издеваетесь / удаляете класс, а затем вызываете ту же функциональность в реальном экземпляре, это не сработает. Но есть обходные пути, используя насмешки для обоих вызовов и т. Д.
Если это неправильный подход, как лучше всего протестировать метод, который использует другие методы в том же тестовом классе? Я думал, что разделение методов было лучшей практикой.
Спасибо!
Комментарии:
1. Что плохого в стандартном подходе — создании экземпляра макета типа A и издевательском методе, используемом в методе Undertest?
2. Я не понимаю, какую проблему вы пытаетесь решить.
3. @Ava Да, так что попробовал, и кажется, что это невозможно с помощью фреймворка ScalaMock, похоже.
4. @Jasper-M В основном я пытаюсь высмеять метод, который используется внутри метода, который я пытаюсь протестировать. Но обычно обходные пути, подобные предложенным Авой, кажутся невозможными с помощью ScalaMock, и мне было любопытно, есть ли способ это сделать.
Ответ №1:
Если я правильно понимаю ваш вопрос, вы можете создать макет A
, а затем сказать ScalaMock, чтобы он выполнил реальную реализацию methodUnderTest
.
val aMock = mock[A]
when(aMock.methodUnderTest).thenCallRealMethod()
when(aMock.methodUsedInMethodUnderTest).thenReturn(someValue)
aMock.methodUnderTest shouldEqual someOtherValue
Комментарии:
1. Ааааа, это может быть оно! Я проверю это завтра и доложу об этом!