Я новичок в разработке и модульных тестах в частности. Я предполагаю, что мое требование довольно простое, но я очень хочу знать другие мысли об этом.Смещающиеся переменные-члены класса с использованием Mockito
Предположит, у меня есть два класса, как так -
public class First {
Second second ;
public First(){
second = new Second();
}
public String doSecond(){
return second.doSecond();
}
}
class Second {
public String doSecond(){
return "Do Something";
}
}
Скажут, я пишу модульное тестирование для проверки First.doSecond()
метода. Однако, предположим, я хочу сделать так, чтобы класс Second.doSecond()
. Я использую Mockito для этого.
public void testFirst(){
Second sec = mock(Second.class);
when(sec.doSecond()).thenReturn("Stubbed Second");
First first = new First();
assertEquals("Stubbed Second", first.doSecond());
}
Я вижу, что насмешка не вступает в силу, и утверждение терпит неудачу. Нельзя ли издеваться над переменными-членами класса, которые я хочу проверить. ?
Спасибо. Вижу. Мне просто интересно, как я могу выполнить интеграционные тесты, используя mock, где может быть много внутренних методов, классов, которые, возможно, нужно издеваться, но не обязательно доступны для установки через setXXX() перед началом работы. –
Используйте инфраструктуру внедрения зависимостей с тестовой конфигурацией. Составьте диаграмму последовательности теста интеграции, который вы пытаетесь сделать. Фактор диаграммы последовательности в объекты, которые вы можете контролировать. Это означает, что если вы работаете с классом фреймворка, у которого есть анти-шаблон зависимого объекта, который вы показываете выше, то вы должны рассматривать объект и его слабозависимый элемент как единое целое в терминах диаграммы последовательности. Будьте готовы настроить факторинг любого кода, который вы контролируете, чтобы сделать его более проверяемым. – kittylyst
Уважаемый @kittylyst, да, возможно, это неправильно с точки зрения TDD или с любой рациональной точки зрения. Но иногда разработчик работает в тех местах, где ничего не имеет смысла, и единственная цель, которую у вас есть, - это просто завершить рассказы, которые вы назначили, и уйти. Да, это неправильно, это бессмысленно, неквалифицированные люди принимают ключевые решения и все такое. Таким образом, в конце концов, анти-шаблоны выигрывают много. – amanas