助手 class 内的 Jmockit @Mocked 未初始化
Jmockit @Mocked inside a helper class doesn't initialize
如果我有以下情况;
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 已被模拟,并且有一个实例可用。
但是,如果我将其更改为创建一个 helper class 用于模拟,
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初始化
我希望将所有模拟都放在一个助手 class 中,而不是必须在测试 class 中声明所有模拟。
任何想法为什么这不起作用?
谢谢。
谢谢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);
}
};
}
}
和
public class mockTest 扩展 MockHelper {
@Test
public void testMockedInClass() {
System.out.println("Mocked in helper class");
setupMocks();
ClassA a = new ClassA();
a.methodA();
}
}
由于测试 class 扩展了助手,它现在可以工作了;
Mocked in helper class
In setupMocks, classB:jmockitpractice.ClassB@5d54e317
如果我有以下情况;
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 已被模拟,并且有一个实例可用。
但是,如果我将其更改为创建一个 helper class 用于模拟,
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初始化
我希望将所有模拟都放在一个助手 class 中,而不是必须在测试 class 中声明所有模拟。 任何想法为什么这不起作用? 谢谢。
谢谢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);
}
};
}
}
和 public class mockTest 扩展 MockHelper {
@Test
public void testMockedInClass() {
System.out.println("Mocked in helper class");
setupMocks();
ClassA a = new ClassA();
a.methodA();
}
}
由于测试 class 扩展了助手,它现在可以工作了;
Mocked in helper class
In setupMocks, classB:jmockitpractice.ClassB@5d54e317