我類..排除Spring組件特定類掃描而寫Spring集成測試
在於SRC/intregation-test/java下
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = StoreOrderFulfillmentApplication.class)
@ActiveProfiles("Test")
public class OrderCreationIntregationTest {
@Autowired
private TestRestTemplate restTemplate;
@MockBean
private OrderRepository orderRepository;
@MockBean
private OrderLineItemRepository orderLineItemRepository;
@MockBean
private InternalEventPublisher internalEventPublisher;
@SuppressWarnings("unchecked")
@Before
public void setup() {
Mockito.when(orderRepository.findByOfsReferenceId("OFS:GMO:Z100002062-99")).thenReturn(null);
OrderEntity savedOrder = new OrderEntity();
savedOrder.setOrderId(1023);
Mockito.when(orderRepository.save(Mockito.any(OrderEntity.class))).thenReturn(savedOrder);
Iterable<OrderLineItemEntity> orderLineItemList = prepareOrderLineItemEntityIterable();
Mockito.when(orderLineItemRepository.save(Mockito.any(Iterable.class))).thenReturn(orderLineItemList);
}
@Test
public void test() throws ParseException {
FulfillmentOrder fulfillmentOrderRequestVO = new FulfillmentOrder();
fulfillmentOrderRequestVO = buildFulfillmentOrder();
String myMessage = "Order Created";
ResponseEntity<ResponseOrderMessage> responseEntity = restTemplate.postForEntity("/fulfillmentprocessor/orders",
fulfillmentOrderRequestVO, ResponseOrderMessage.class);
ResponseOrderMessage responseOrderMessage = responseEntity.getBody();
assertEquals(HttpStatus.CREATED, responseEntity.getStatusCode());
assertEquals(myMessage, responseOrderMessage.getMessage());
}
在於的src/main/java的
@SpringBootApplication
public class StoreOrderFulfillmentApplication {
public static void main(String[] args) {
SpringApplication.run(StoreOrderFulfillmentApplication.class, args);
}
}
現在的問題是我想排除類 get component scanning.my這個類包含對apache Kafka的依賴關係。 如果這個類在容器啓動時加載,它開始尋找kafka運行實例。 因此,在運行Intregation測試時,我不會啓動我的Kafka服務器,所以我想運行 使kafka關機的內部測試。
此我可以通過addding這條線將其從被獲取部件掃描不含OrderReceiveEventConfiguration類代碼StoreOrderFulfillmentApplication類的添加一行代碼在StoreOrderFulfillmentApplication類
@ComponentScan(basePackages = "com.tesco.store.order.fulfillment.processor", excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = OrderReceiveEventConfiguration.class))
實現。
現在的問題是我不會在主代碼中添加任何測試配置更改。 所以我很努力去做src/intregation-test/java源文件夾中的排除,這是他們在容器啓動代碼期間排除這個特定類的一些方法。
但它不應該影響我的主類的代碼意味着內部的src/main/java的
任何幫助表示讚賞代碼..
你想測試應用程序的行爲,當Kafka關閉/不運行或者你只是想在測試時忽略卡夫卡部分? –
是@ Bond-JavaBond,我想在測試時忽略kafka部分... 實際上我的要求說,在執行測試套件時,應該像數據庫或消息隊列一樣嘲笑外部依賴關係... 在我的測試框數據庫和消息隊列服務器中不這樣做的原因,所以我們必須準備我們的測試套件,因爲它不應該檢查連接性。 –