Я реализую сервис, используя службу Spring Boot и Spring Cloud Config для предоставления значений конфигурации. В моей службе у меня есть несколько значений конфигурации, которые необходимо обновить, когда значение изменяется в удаленном Git-репо, и я использовал @RefreshScope
, чтобы включить эту функцию.@RefreshScope, похоже, игнорирует mockito's mocks
Проблема возникает, когда я пытаюсь ввести макет для RestTemplate
в этой службе, он, кажется, игнорирует его и вместо этого использует экземпляр с автоподстановкой. Если я прокомментирую аннотацию, она, похоже, работает нормально.
Вот код для службы:
@Service
@RefreshScope
public class MyServiceImpl implements MyService {
private static final Logger LOG = Logger.getLogger(MyServiceImpl.class);
@Autowired
public RestTemplate restTemplate;
@Value("${opts.default}")
private String default;
@Value("${opts.address}")
private String address;
@Value("${opts.separator}")
private String separator;
...
}
Тест Исходный код:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ServiceTest {
@Mock
private RestTemplate restTemplate;
@Autowired
@InjectMocks
private MyServiceImpl service;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
public void testMethod() throws Exception {
when(restTemplate.postForObject(anyString(), any(), eq(ServiceResponse.class), anyMap())).thenReturn(getSuccessfulResponse());
ServiceResponse response = service.doYourStuff();
Assert.assertNotNull(response);
Assert.assertTrue(response.isSuccessful());
}
...
}
Спасибо! Я добавил себя в качестве наблюдателя к этому вопросу –
Btw, AopTestUtils класс, который вы используете вместо AopUtils? –
Да, это исправлено тип .. –