Можно ли имитировать / заглушать методы одного и того же тестового класса с помощью ScalaMock?

#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. Ааааа, это может быть оно! Я проверю это завтра и доложу об этом!