【发布时间】:2017-07-03 20:51:51
【问题描述】:
我的课是..
位于 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);
}
}
现在的问题是我想排除一个类 从被扫描组件开始。我的这个类包含对 apache Kafka 的依赖。 如果此类在容器启动时加载,它将开始寻找 kafka 运行实例。 所以在运行集成测试时我不会启动我的 Kafka 服务器,所以我想运行 集成测试使 kafka 关闭。
我可以通过在 StoreOrderFulfillmentApplication 类中添加一行代码来实现
@ComponentScan(basePackages = "com.tesco.store.order.fulfillment.processor", excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = OrderReceiveEventConfiguration.class))
通过添加这行代码 StoreOrderFulfillmentApplication 类,它将 OrderReceiveEventConfiguration 类排除在组件扫描之外。
现在的问题是我不认为在主代码中添加任何测试配置更改。 所以我正在努力从 src/intregation-test/java 源文件夹中进行相同的排除,这是我可以在容器启动代码期间排除这个特定类的某种方式。
但它不应该影响我的主类代码意味着 src/main/java
中的代码感谢任何帮助..
【问题讨论】:
-
您想在 Kafka 关闭/未运行时测试应用程序的行为,还是只想在测试时忽略 Kafka 部分?
-
是的@Bond-JavaBond,我想在测试时忽略 kafka 部分......实际上我的要求说,在执行测试套件时,外部依赖项应该像数据库或消息队列一样被模拟......原因在我的测试框中执行此操作 数据库和消息队列服务器不存在,因此我们必须准备我们的测试套件,就像它不应该检查连接一样。
标签: java spring spring-mvc spring-boot spring-test