package net.thucydides.junit.runners; import net.thucydides.core.model.TestOutcome; import net.thucydides.core.reports.AcceptanceTestReporter; import net.thucydides.core.reports.TestOutcomes; import net.thucydides.junit.rules.QuietThucydidesLoggingRule; import net.thucydides.samples.AnnotatedSingleTestScenario; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.notification.RunNotifier; import org.junit.runners.model.InitializationError; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.File; import java.io.IOException; import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; /** * Managing the WebDriver instance during a test run The instance should be * created once at the start of the test run, and closed once at the end of the * tets. * * @author johnsmart * */ public class WhenGeneratingTestReports extends AbstractTestStepRunnerTest { @Mock AcceptanceTestReporter mockReporter; @Before public void initMocks() { MockitoAnnotations.initMocks(this); } @Rule public QuietThucydidesLoggingRule quietThucydidesLoggingRule = new QuietThucydidesLoggingRule(); @Test public void a_test_reporter_can_subscribe_to_the_runner() throws InitializationError, IOException { ThucydidesRunner runner = new ThucydidesRunner(AnnotatedSingleTestScenario.class); runner.subscribeReporter(mockReporter); runner.run(new RunNotifier()); verify(mockReporter).generateReportFor(any(TestOutcome.class), any(TestOutcomes.class)); } @Test public void the_runner_should_tell_the_reporter_what_directory_to_use() throws InitializationError, IOException { ThucydidesRunner runner = new ThucydidesRunner(AnnotatedSingleTestScenario.class); runner.subscribeReporter(mockReporter); runner.run(new RunNotifier()); verify(mockReporter,atLeast(1)).setOutputDirectory(any(File.class)); } @Test public void multiple_test_reporters_can_subscribe_to_the_runner() throws InitializationError, IOException { ThucydidesRunner runner = new ThucydidesRunner(AnnotatedSingleTestScenario.class); AcceptanceTestReporter reporter1 = mock(AcceptanceTestReporter.class); AcceptanceTestReporter reporter2 = mock(AcceptanceTestReporter.class); runner.subscribeReporter(reporter1); runner.subscribeReporter(reporter2); runner.run(new RunNotifier()); verify(reporter1).generateReportFor(any(TestOutcome.class), any(TestOutcomes.class)); verify(reporter2).generateReportFor(any(TestOutcome.class), any(TestOutcomes.class)); } }