use*_*391 4 java junit arraylist
我正在创建一个包含很少元素的List(ArrayList).我想确保它包含我添加的元素.现在,由于订单发生变化,这只在某些时候起作用:
@Test
public void testThreeReporters(){
ClientConfig myConfig = new ClientConfigFactory().getConfig().withMetricsReporters(new HashSet<>(Arrays.asList(ClientConfig.MetricsReporterType.LOG, ClientConfig.MetricsReporterType.GRAPHITE, ClientConfig.MetricsReporterType.CLOUD_WATCH)));
List<ScheduledReporter> reporters = MetricsFactory.configureMetricsReporters(MetricsFactory.createMetricsClient(),myConfig);
assertEquals(3, reporters.size());
assertTrue(reporters.get(2) instanceof Slf4jReporter);
assertTrue(reporters.get(1) instanceof GraphiteReporter);
assertTrue(reporters.get(0) instanceof CloudWatchReporter);
}
Run Code Online (Sandbox Code Playgroud)
我想使用'包含'以便不依赖于订单.我尝试过类似的东西:
assertTrue(Arrays.asList(reporters).contains((Arrays.asList(ClientConfig.MetricsReporterType.LOG, ClientConfig.MetricsReporterType.GRAPHITE, ClientConfig.MetricsReporterType.CLOUD_WATCH))));
Run Code Online (Sandbox Code Playgroud)
和其他一些组合,但它不起作用.
JB *_*zet 11
assertEquals(3, reporters.size());
assertTrue(reporters.stream().anyMatch(e -> e instanceof Slf4jReporter));
assertTrue(reporters.stream().anyMatch(e -> e instanceof GraphiteReporter));
assertTrue(reporters.stream().anyMatch(e -> e instanceof CloudWatchReporter));
Run Code Online (Sandbox Code Playgroud)
使用开箱即用的普通 JUnit 确实没有一种简单的方法可以做到这一点。您可以开发一种辅助方法,使用@JBNizet在他的答案中演示的技术来简化此操作。
或者您可以使用额外的测试库来帮助解决此问题。例如使用AssertJ你可以这样做:
import static org.assertj.core.api.Assertions.assertThat;
// ...
assertThat(reporters).extracting("class").contains(
Slf4jReporter.class,
GraphiteReporter.class,
CloudWatchReporter.class
);
Run Code Online (Sandbox Code Playgroud)
如果你使用Maven,你可以像这样添加assertj依赖:
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.4.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7383 次 |
| 最近记录: |