JMockit与Spring autowire无法正常工作

时间:2015-09-24 20:39:18

标签: java spring jmockit

我正在使用JMockit测试正在自动装配的类(弹簧)。从这个post,我可以理解,我将不得不手动将模拟实例注入ClassToBeTested。即使我这样做,我也会在行NullPointerEx遇到Deencapsulation.setField(classUnderTest, mockSomeInterface);,因为classUnderTest和mockSomeInterface都是null。但是,如果我在@Autowire上使用mockSomeInterface,则会自动正确连接。

要测试的课程:

@Service
public class ClassToBeTested implements IClassToBeTested {

 @Autowired
 ISomeInterface someInterface;

 public void callInterfaceMethod() {
  System.out.println( "calling interface method");
  String obj = someInterface.doSomething();
 }
}

测试用例:

public class ClassToBeTestedTest  {

@Tested IClassToBeTested classUnderTest;

@Mocked ISomeInterface mockSomeInterface;

public void testCallInterfaceMethod(){
  Deencapsulation.setField(classUnderTest, mockSomeInterface);
  new Expectations() { {
     mockSomeInterface.doSomething(anyString,anyString); result="mock data";     
  }};
 // other logic goes here
 }
}

1 个答案:

答案 0 :(得分:1)

使用最新版本的JMockit尝试以下操作(注意链接的问题来自2010年,从那时起该库已经发展了很多):

public class ClassToBeTestedTest
{
    @Tested ClassToBeTested classUnderTest;
    @Injectable ISomeInterface mockSomeInterface;

    @Test
    public void exampleTest() {
        new Expectations() {{
            mockSomeInterface.doSomething(anyString, anyString); result = "mock data";
        }};

        // call the classUnderTest
    }
}