Я новичок в 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
. Теперь это работает.