带有 Spring 自动装配的 JMockit 不工作

JMockit with Spring autowire not working

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

Class待测:

@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
 }
}

尝试以下操作,使用最新版本的 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
    }
}