Прежде всего, я начну с заявления об отказе от ответственности за то, что я решительный сторонник использования простой идиомы фабричного программирования и расширения использования шаблона метода фабрики вместо создания объектов внутри классов. Фабричная идиома помогает вам изолировать ваш код от изменений, придерживаясь принципа Open to Extension, близкого к модификации объектно-ориентированного программирования.
Вам также может понравиться:
Модульное тестирование: хорошее, плохое и уродливое
Кроме того, идея состоит в том, чтобы писать тестируемый код, а не писать взлом для тестирования кода.
При этом я продемонстрирую простой метод написания тестовых случаев для классов, которые используют новые ключевые слова в своем методе с помощью Mockito и минимальных изменений кода.
Ссылка на документацию для Mockito .
Первым шагом является импорт зависимостей Mockito в ваш код.
Джава
1
<dependency>
2
<groupId>org.mockito</groupId>
3
<artifactId>mockito-core</artifactId>
4
<version>2.23.0</version>
5
<scope>test</scope>
6
</dependency>
Теперь давайте посмотрим пример того, как проверить класс.
Предположим, что ниже приведен класс, который мы хотим протестировать.
Джава
xxxxxxxxxx
1
public class ClassToBeTested {
2
3
private ExternalClass object;
4
public void MethodToTest() {
6
object = new ExternalClass(arg1, arg2);
7
}
8
}
Ниже приведен пример класса объекта, который создается в ClassToBeTested.
Джава
xxxxxxxxxx
1
public class ExternalClass{
2
private Object obj1;
3
private Object obj2;
4
public ExternalClass(Object arg1, Object arg2){
5
this.obj1=arg1;
6
this.obj2=arg2;
7
}
8
}
Следующим шагом является рефакторинг класса для тестирования и извлечение объекта, созданного в отдельный метод.
Джава
xxxxxxxxxx
1
public class ClassToBeTested {
2
private ExternalClass object;
4
public ExternalClass makeExternalClassObject(Object arg1, Object arg2){
6
return new ExternalClass(arg1, arg2);
7
}
8
public void MethodToTest() {
10
object = makeExternalClassObject(arg1, arg2);
11
}
12
}
Здесь следует помнить одну вещь: избегать какой-либо логики в методе make, чтобы нам не пришлось писать модульный тест для этого метода.
Теперь давайте напишем контрольный пример для тестирования MethodToTest.
Джава
xxxxxxxxxx
1
MockitoJUnitRunner.class) (
2
public class ClassToBeTestedTest {
3
private ExternalClass externalClass;
4
6
public void testMethodToBeTested(){
7
ClassToBeTested classToBeTestedSpy = Mockito.spy(new ClassToBeTested());
8
Mockito.doReturn(externalClass).when(classToBeTestedSpy)
9
.makeExternalClassObject(arg1,arg2);
10
classToBeTestedSpy.MethodToTest();
11
/*Assertion Statement */
12
}
14
}
Готово! С помощью этого трюка мы можем написать модульные тесты даже для классов, в которых реализованы объекты. Учитывая, что реализация фабричного шаблона неосуществима или не стоит затраченных усилий.
Благодаря!
Следуйте за мной в твиттере на @IamShivamMohan
Дальнейшее чтение
Как автоматизировать модульный тест Java, включая макеты и утверждения