如果我有以下内容;
public class ClassA {
public void methodA(){
System.out.println("In ClassA, methodA");
}
}
public class ClassB {
public void methodB(){
}
}
和junit测试;
@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:jmockitpractice.ClassB@329b0985
正如预期的那样,classB是Mocked,并且有一个实例。
但是,如果我改变它来创建一个用于模拟的辅助类,
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未被MockHelper内的@Mocked初始化
我想在一个帮助器类中进行所有的模拟,而不是必须在测试类中声明所有的模拟。 任何想法为什么这不起作用? 感谢。
答案 0 :(得分:0)
感谢Dom Farr,答案是继承。
public class MockHelper {
@Mocked
ClassB classB;
public void setupMocks() {
new MockUp<ClassA>() {
@Mock
public void methodA() {
System.out.println("In setupMocks, classB:" + classB);
}
};
}
}
和 公共类mockTest扩展了MockHelper {
@Test
public void testMockedInClass() {
System.out.println("Mocked in helper class");
setupMocks();
ClassA a = new ClassA();
a.methodA();
}
}
当测试类扩展帮助程序时,它现在可以工作;
Mocked in helper class
In setupMocks, classB:jmockitpractice.ClassB@5d54e317