JMockit с Spring autowire не работает

Я использую JMockit для тестирования класса, который автоматически подключается (пружина). Из этого сообщения я понял, что мне придется вручную вводить фиктивный экземпляр класса 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
 }
}

person Pankaj    schedule 24.09.2015    source источник


Ответы (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
    }
}
person Rogério    schedule 24.09.2015
comment
Как я могу сделать это с помощью весеннего поля @Autowired в тестовом классе? - person Basil; 29.11.2015