Как протестировать приватный Injected обьект?
Есть код:
public class MyClass {
@Inject
private SecondClass secondClass;
public boolean isInProgres() {
if (secondClass.isTaskInProgress()) {
return true;
}
return false;
}
}
В тестах я хочу сделать что-то типа:
when(secondClass).doReturn(true);
assertThat(MyClass.isInProgres(), equalTo(true));
Но если бы secondClass передовался в конструктор, то я бы мог переопределить поведение метода обьекта, который я передаю.
А так в тестах создал обьект MyClass и он инжектит не понятно что и не проверить тестами работу.
Лучше всего избавится от этой привычки делать инъекцию приватным полям. Лучший способ это впихнуть инъекцию через конструктор, тогда у вас не будет никаких проблем в тестах:
@Inject
public MyClass(SecondClass secondClass) { *** }
Вариация прошлого - через сеттер. Но это если не стремитесь к иммутабельности:
@Inject
public void setSecondClass(SecondClass secondClass) { *** }
Чуть большее зло - это тестирование с использованием SpringJUnit4ClassRunner. Тогда мы объявляем контекст:
@Configuration
class TestContext {
@Bean
public void SecondClass secondClassProvider() { Mockito.mock(... }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestContext.class)
public class Test {
@Inject
MyClass myClass;
}
Самое большое зло - это рефлексия:
ReflectionTestUtils.setField("secondClass", ...)
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Имется две таблицы: Судья и СоревнованиеОдно соревнование судят несколько судей, один и тот же судья может судить несколько соревнований
В NetBeans IDE создана форма проекта с одной кнопкой , которая в обработчике событий имеет код на выполнение скрипта , который написан на PythonСкрипт...
Помогите пожалуйста в следующей проблемеУ меня есть список ArrayList, и связанная с ним карта HashMap