我为我的 spring mvc 项目编写了黄瓜/硒测试用例。
我的意图是,当我从控制台运行 mvn test 时,我正在启动码头服务器,其中 spring(mvc dispatcher) bean 加载在一个单独的线程中,而正常流程包括运行黄瓜测试用例。
比如下面这张。
RunCukesTest.java
@RunWith(Cucumber.class)
@Cucumber.Options(format = {"pretty", "html:target/cucumber"})
public class RunCukesTest {
@BeforeClass
public static void setUpBeforeClass() {
try {
UsageUIService.start();
} catch (Exception e) { }
}
}
使用UIService
public class UsageUIService {
public boolean start() throws Exception {
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { AppContextBuilder.buildWebAppContext() } );
jettyServer = new JettyServer();
jettyServer.setHandler(contexts);
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(8085);
jettyServer.addConnector(connector);
Runnable runner = new Runnable() {
@Override
public void run() {
try {
jettyServer.start();
jettyServer.join();
} catch (Exception e) { }
}
};
new Thread(runner).start();
return jettyServer.isStarted();
}
public boolean isStarted()
{
return jettyServer.isStarted();
}
}
集合步骤定义
public class CollectionStepdefs {
private WebDriver driver;
@Before
public void setUp() {
driver = new HtmlUnitDriver();
driver.get("xyz:8085/usage-ui/collection.htm");
}
@Given("^I want to see today collection count$")
public void I_want_to_see_today_collection_count() {
// assertion starts
}
}
当我使用 java main 方法运行 UsageUIService 时,我可以点击我在驱动程序中提到的 url,
xyz:8085/usage-ui/collection.htm
该过程仍在等待,直到我按Ctrl+C
但是,当它作为 Junit/mvn 测试运行时,我无法实现并且码头服务器没有启动。该进程不会等待并在执行 @Test 方法后立即结束。
使用 main 运行 java 程序和以 junit 运行有什么区别?
为什么在以 Junit 身份运行时它不保持提示并保持进程直到我执行ctrl+ C?
我想引导我的应用程序,当我通过 mvn test/Junit 运行并同时继续执行黄瓜测试套件时,它应该开始在一个线程中侦听端口 8085。
有什么解决办法吗?