Переопределить автонастроенный экземпляр с помощью макета - PullRequest
0 голосов
/ 26 сентября 2018

ServiceInstance.createInstance должен вызываться при выполнении вызова PUT по указанному ниже URL-адресу.Чтобы иметь возможность проверить, вызывается ли правильный метод при отправке запроса PUT, я хочу смоделировать объект (ServiceInstance), который вызвал метод.Тем не менее, макет не перекрывает реальный экземпляр.Чего мне не хватает в этой настройке?

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { MySpringBootApplication.class })
@SpyBean(ServiceInstance.class)

public class ServiceTest {

@Autowired
ServiceInstance serviceInstance;

@BeforeClass
public static void setUp() {
    SpringApplication.run(MySpringBootApplication.class, new String[] {});
}

@Test
public void sendPutRequest() throws JSONException, ClientProtocolException, IOException {
    CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    HttpPut putRequest = new HttpPut("http://localhost:8080/v2/instances/1");
    //.....

    httpClient.execute(putRequest);
    Mockito.verify(serviceInstance, Mockito.times(1)).createInstance(Mockito.any());

}

}

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Это потому, что вы не используете mock, но вы использовали spy, поэтому был вызван реальный объект и реальный метод.

Вместо аннотации SpyBean попробуйте использовать аннотацию MockBean (она имитирует бин в контексте Spring)

Пример

0 голосов
/ 26 сентября 2018

Вы можете создать профиль для теста

@Profile("test")
@Configuration
public class ServiceInstanceConfiguration {
   @Bean
   @Primary
   public ServiceInstance serviceInstance() {
    return Mockito.mock(ServiceInstance.class);
   }
}

и запустить свой тест с профилем "test"

@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { MySpringBootApplication.class })
public class ServiceTest {

    @Autowired
    ServiceInstance serviceInstance;
  //...
...