Sho*_*Pal 6 java spring spring-mvc spring-test spring-boot
我的课是..
位于 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());
}
Run Code Online (Sandbox Code Playgroud)
位于 src/main/java
@SpringBootApplication
public class StoreOrderFulfillmentApplication {
public static void main(String[] args) {
SpringApplication.run(StoreOrderFulfillmentApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是我想从获取组件扫描中排除一个类。我这个类包含对 apache Kafka 的依赖。如果这个类在容器启动时加载,它就会开始寻找 kafka 运行实例。所以在运行集成测试时我不会启动我的 Kafka 服务器,所以我想运行集成测试使 kafka 关闭。
这可以通过在 StoreOrderFulfillmentApplication 类中添加一行代码来实现
@ComponentScan(basePackages = "com.tesco.store.order.fulfillment.processor", excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = OrderReceiveEventConfiguration.class))
Run Code Online (Sandbox Code Playgroud)
通过添加这行代码 StoreOrderFulfillmentApplication 类,它可以将 OrderReceiveEventConfiguration 类排除在获取组件扫描之外。
现在的问题是我不认为在主代码中添加任何测试配置更改。所以我正在努力从src/intregation-test/java源文件夹中做同样的排除,这是我可以在容器启动代码期间排除这个特定类的某种方式。
但它不应该影响我的主类代码意味着src/main/java 中的代码
任何帮助表示赞赏..
@Conditional您可以如下图所示使用。
application.properties介绍一个属性的时候说kafka.enabled。 OrderReceiveEventConfiguration为@Conditional(PropertyCondition.class)kafka.enabled价值即。true(对于正常运行)或false(对于测试)OrderReceiveEventConfiguration将分别被拾取或忽略,而无需更改代码。如果需要更多信息,请在评论中告知。
除了主要@conditional注释之外,还有一组类似的注释可用于不同的情况。
和注释允许根据特定类的存在或不存在来包含配置@ConditionalOnClass。@ConditionalOnMissingClass
例如,当OObjectDatabaseTx.class添加到依赖项并且没有OrientWebConfigurerbean 时,我们创建配置器。
@Bean
@ConditionalOnWebApplication
@ConditionalOnClass(OObjectDatabaseTx.class)
@ConditionalOnMissingBean(OrientWebConfigurer.class)
public OrientWebConfigurer orientWebConfigurer() {
return new OrientWebConfigurer();
}
Run Code Online (Sandbox Code Playgroud)
和@ConditionalOnBean注释@ConditionalOnMissingBean允许根据特定 bean 的存在或不存在来包含 bean。您可以使用 value 属性按类型指定 Bean,或使用 name 属性按名称指定 Bean。search 属性允许您限制ApplicationContext搜索 bean 时应考虑的层次结构。
参见上面的例子,我们检查是否没有定义的bean。
该@ConditionalOnProperty注释允许基于 Spring 环境属性包含配置。使用 prefix 和 name 属性来指定应检查的属性。默认情况下,任何存在且不等于的属性false都会被匹配。您还可以使用havingValue和matchIfMissing属性创建更高级的检查。
@ConditionalOnProperty(value='somebean.enabled', matchIfMissing = true, havingValue="yes")
@Bean
public SomeBean someBean(){
}
Run Code Online (Sandbox Code Playgroud)
该@ConditionalOnResource注释允许仅当存在特定资源时才包含配置。
@ConditionalOnResource(resources = "classpath:init-db.sql")
Run Code Online (Sandbox Code Playgroud)
和注释允许根据应用程序是否是“Web 应用程序”来包含配置@ConditionalOnWebApplication。@ConditionalOnNotWebApplication
@Configuration
@ConditionalOnWebApplication
public class MyWebMvcAutoConfiguration {...}
Run Code Online (Sandbox Code Playgroud)
该@ConditionalOnExpression注释允许根据 SpEL 表达式的结果包含配置。
@ConditionalOnExpression("${rest.security.enabled}==false")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12186 次 |
| 最近记录: |