Если у меня есть следующее;Jmockit @ Замещено внутри вспомогательного класса не инициализируется
public class ClassA {
public void methodA(){
System.out.println("In ClassA, methodA");
}
}
public class ClassB {
public void methodB(){
}
}
и тест юнита;
@Test
public void testMocked(@Mocked final ClassB mockedB) {
System.out.println("Mocked inline");
new MockUp<ClassA>() {
@Mock
public void methodA() {
System.out.println("Inline mockup, mockedB:" + mockedB);
}
};
ClassA a = new ClassA();
a.methodA();
}
Затем, когда я запускаю тест, я получаю;
Mocked inline
Inline mockup, mockedB:[email protected]
Как и ожидалось, класс B является посмешищем и доступен экземпляр.
Но, если я изменить это, чтобы создать вспомогательный класс для насмешливый,
public class MockHelper {
@Mocked ClassB classB;
public void setupMocks(){
new MockUp<ClassA>() {
@Mock
public void methodA(){
System.out.println("In setupMocks, classB:"+classB);
}
};
}
}
и JUnit становится;
@Test
public void testMockedInClass() {
System.out.println("Mocked in helper class");
MockHelper mh = new MockHelper();
mh.setupMocks();
ClassA a = new ClassA();
a.methodA();
}
В результате я получаю;
Mocked in helper class
In setupMocks, classB:null
ClassB не инициализируется @Mocked внутри MockHelper
Я хотел бы, чтобы все насмешки в вспомогательном классе, вместо того, чтобы объявить все насмешки в тестовом классе. Любые идеи, почему это не работает? Спасибо.
Какая польза от этого? –
У меня есть много тестов для написания, и все они должны настроить макеты таким же образом. Ввод всех настроек в один класс позволит сэкономить много дублирующегося кода. –
Не дублирует насмешливые классы. Вы должны иметь возможность использовать наследование. Пусть каждый класс, которому нужны общие mocks, расширяет ваш вспомогательный класс –