У меня есть класс для тестирования, который выглядит так:Mock объект суперкласса в подклассе, используя EasyMock
public class MainClass extends BaseClass {
public static int variableToBeAsserted= 0;
MainClass(ConfigClass config) {
super(config);
}
public void myMethod() {
List list = objectOfClass1inSuperClass.operation(objectOfClass2inSuperClass.method())
while(methodInSuperClass()) {
// doing operations with 'list'
variableToBeAsserted++;
}
}
// ..few other methods which I am not going to test.
}
Я подавил конструктор моего BaseClass
и мой ConfigClass
. Теперь мой тестовый класс, как это:
@RunWith(PowerMockRunner.class)
@PrepareForTest(MainClass.class)
public class TestClass {
@Before
public void setUp(){
suppress(constructor(BaseClass.class))
suppress(constructor(ConfigClass.class))
}
@Test
public void testMyMethod(){
MainClass main = new MainClass(new ConfigClass(""));
List list1= new ArrayList();
test1.add("somevalues");
Class1inSuperClass ob1 = PowerMock.createMock(Class1inSuperClass.class);
Class2inSuperClass ob2 = PowerMock.createMock(Class2inSuperClass.class);
EasyMock.expect(ob2.method()).andReturn(getClass());
EasyMock.expect(ob1.operation(getClass())).andReturn(list1);
PowerMock.replayAll();
main.myMethod();
Assert.assertEquals(expectedValue, main.variableToBeAsserted);
}
}
Теперь я не знаю, почему, но мой тест завершается с NullPointerException
.
Он пытается получить доступ к objectofClass1inSuperClass
и не удается. Я думал, что это будет издеваться над этим. Но это не издевается.
EDIT: Я пишу только тест, и ничего не могу изменить в BaseClass
. Однако у меня есть возможность изменить MainClass
.
Пожалуйста, исправьте меня, если я ошибаюсь. Вот как я понимаю ваш случай: в конструкторе «BaseClass» поля «objectOfClass1inSuperClass» и 'objectOfClass2inSuperClass' инициализируются. Вы запрещаете конструктор 'BaseClass', чтобы избежать такого поведения. Но почему вы подавляете конструктор ConfigClass? Также я вижу, что вы создаете mocks, но никогда не добавляете/не устанавливаете его. –
Даже конструктор 'configClass' инициализирует некоторые классы, которые я не хочу использовать. Поэтому я подавляю это. Да, это то, что я хочу знать. Как вводить насмешки в мой фактический объект – v1shnu