package guide; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Suite; import com.xebialabs.restito.server.StubServer; import com.xebialabs.restito.support.junit.NeedsServer; import com.xebialabs.restito.support.junit.ServerDependencyRule; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; // This Suite stuff is just to run tests from a subclass @RunWith(Suite.class) @Suite.SuiteClasses(JunitIntegrationTest.MyTest.class) public class JunitIntegrationTest { public static abstract class MyParentTest { StubServer stubServer; @Rule public ServerDependencyRule serverDependency = new ServerDependencyRule(); @Before public void startServer() { if (serverDependency.isServerDependent()) { stubServer = new StubServer().run(); } } @After public void stopServer() { if (stubServer != null) { stubServer.stop(); } } } public static class MyTest extends MyParentTest { @Test @NeedsServer public void shouldStartServer() { assertTrue(stubServer.getPort() > 0); } @Test public void shouldStartNoServer() { assertNull(stubServer); } @Test @NeedsServer public void shouldStartServerAgain() { assertTrue(stubServer.getPort() > 0); } } }