net.thucydides.core.bootstrap.ThucydidesAgent Maven / Gradle / Ivy
package net.thucydides.core.bootstrap;
import com.google.common.base.Optional;
import net.thucydides.core.model.Story;
import net.thucydides.core.steps.StepEventBus;
import net.thucydides.core.steps.StepListener;
/**
* A utility class that provides services to initialize web testing and reporting-related fields in arbitrary objects.
* Designed to replace the unfinished Thucydides class.
*/
public final class ThucydidesAgent {
private final ThucydidesContext context;
/**
* Create a new Thucydides agent instance.
* There is always a BaseStepListener configured in the context, but you can also specify other listeners,
* such as for logging (Listeners.getLoggingListener()) and to enable statistics (Listeners.getStatisticsListener())
* @param driver
* @param additionalListeners
*/
public ThucydidesAgent(Optional driver, StepListener... additionalListeners) {
context = ThucydidesContext.newContext(driver, additionalListeners);
}
/**
* Initialize a class for use with Thucydides.
* This involves instrumenting any @Step-annotated classes and setting up the Thucydides listeners.
* @param testCase a Java object containing test methods.
*/
public void enrich(Object testCase) {
context.initialize(testCase);
}
/**
* Tells Thucydides that a new test suite (test case, specification,...) has started.
* @param name
*/
public void testSuiteStarted(String name) {
notifyEventBus().clear();
notifyEventBus().testSuiteStarted(Story.called(name));
}
/**
* Tell Thucydides to start recording test outcomes and step events for a new test.
*
* @param name A human-readable name that will identify this test in the test reports.
*/
public void testStarted(final String name) {
notifyEventBus().testStarted(name);
}
/**
* Tell Thucydides that a test is finished, and to generate the test reports for that test.
*/
public void testFinished() {
notifyEventBus().testFinished();
}
public void testSuiteFinished() {
notifyEventBus().testSuiteFinished();
context.dropListeners();
context.generateReports();
}
private StepEventBus notifyEventBus() {
return StepEventBus.getEventBus();
}
}