Инъекция ложного поля с использованием Mockito

Я новичок в JUnit PowerMockito. Я пытаюсь проверить метод внутри class.that класса, имеющего автоподзавода. Класс обслуживания

@Service
public class MyServiceRegistration
{


    @Autowired
    private AppConfig appConfig;


    public void register() throws xception
    {
    //Do some thing
    }
}

AppConfig

@Component
public class AppConfig
{
    @Value("${spring.application.name}")
    private String applicationName;

    @Value("${server.port}")
    private String serverPort;
    //getter and setter
}

Тестовый класс

@RunWith(PowerMockRunner.class)
@PrepareForTest({ AppConfig.class })
@PowerMockIgnore({ "javax.management.*" })
public class MyServiceRegistrationTest
{ 
    @InjectMocks
    MyServiceRegistration myServiceRegistration = new MyServiceRegistration();
    @Mock
    private AppConfig appConfig;

    @Before
    public void setUp() throws Exception
    {
        PowerMockito.when(AppConfig.getApplicationName()).thenReturn("SomeValue");
        MockitoAnnotations.initMocks(this);
    }

    public final void testRegister() throws Exception
    {

        myServiceRegistration.register();
    }
}

Когда я отлаживаю код, я вижу, что AppConfig подделан. Но поля applicationName и serverPort равны нулю.

экран отладки

введите описание изображения здесь

Как я могу решить эту проблему?

Всего 2 ответа


Проблема с вашим кодом в том, что вы вводите свои макеты дважды.

  • Во-первых, они вводятся @RunWith(PowerMockRunner.class)
  • Второй раз, вручную с MockitoAnnotations.initMocks(this);

Вы устанавливаете ожидания в первую очередь, а затем перезаписываете макеты, поэтому ожиданий нет.

Чтобы доказать это

 @Before public void setUp() throws Exception { PowerMockito.when(appConfig.getApplicationName()).thenReturn("SomeValue"); AppConfig beforeInitMocks = appConfig; MockitoAnnotations.initMocks(this); AppConfig afterInitMocks = appConfig; System.out.println("Same object?: " + (beforeInitMocks == afterInitMocks)); } 

Примечание: я считаю, что в вашем посте есть опечатка, у вас должен быть PowerMockito.when(appConfig.getApplicationName()) (с строчным appConfig )


Перевезу

PowerMockito.when(AppConfig.getApplicationName()).thenReturn("SomeValue"); 

testRegister метод testRegister . Теперь это работает.


Есть идеи?

10000