Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

190
Views
Junit - afirmar que la lista contiene

Estoy creando una Lista (ArrayList) que contiene pocos elementos. Quiero asegurarme de que contiene los elementos que agregué. ahora, esto funciona solo algunas veces, ya que el orden cambia:

 @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); }

Quiero usar 'contiene' para no depender del pedido. Intenté algo como:

 assertTrue(Arrays.asList(reporters).contains((Arrays.asList(ClientConfig.MetricsReporterType.LOG, ClientConfig.MetricsReporterType.GRAPHITE, ClientConfig.MetricsReporterType.CLOUD_WATCH))));

y algunas otras combinaciones, pero no funciona.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

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));
about 4 years ago · Santiago Trujillo Report

0

Realmente no hay una manera fácil de hacer esto con JUnit simple listo para usar. Podría desarrollar un método de ayuda para facilitar esto usando la técnica demostrada por @JBNizet en su respuesta.

O podría usar una biblioteca de prueba adicional que puede ayudar con esto. Por ejemplo, usando AssertJ podrías hacer esto:

 import static org.assertj.core.api.Assertions.assertThat; // ... assertThat(reporters).extracting("class").contains( Slf4jReporter.class, GraphiteReporter.class, CloudWatchReporter.class );

Si usa Maven, puede agregar una dependencia de assertj como esta:

 <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.4.1</version> </dependency>
about 4 years ago · Santiago Trujillo Report

0

El problema es que está tratando de verificar si la lista de reporters contiene una lista, que no es así, ya que especificó que contiene instancias de ScheduledReporter . No he usado ninguna de esas clases, por lo que no puedo proporcionar una solución más elegante, pero lo siguiente debería funcionar:

 @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("No Slf4jReporter was found", containsReporter(reporters, Slf4jReporter.class)); assertTrue("No GraphiteReporter was found", containsReporter(reportera, GraphiteReporter.class)); assertTrue("No CloudWatchReporter was found", containsReporter(reporters, CloudWatchReporter.class)); } /** * @return {@code true} if {@code reporters} contains an object of type * {@code expectedClass}, otherwise {@code false}. */ private boolean containsReporter(List<ScheduledReporter> reporters, Class expectedClass) { for (ScheduledReporter reporter : reporters) { if (expectedClass.isInstance(reporter)) { return true; } } return false; }
about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!