我有一个基于 Maven 的 Web 应用程序项目,它生成一个要在 Tomcat 中运行的 WAR。让我们假设,为了论证,该项目的单元测试通过网络实际发送/接收请求(而不是简单地使用模拟请求调用 servlet 方法)至关重要。
有什么方法可以让我的测试工具在同一个 JVM 中运行 Tomcat 实例,加载当前项目,并让测试用例在 localhost
上命中它?如果做不到这一点,我实际上如何以编程方式将当前项目(以及依赖项)打包到 WAR 中,以便我可以使用 Cargo 以编程方式将其上传到其他 Tomcat 实例?有没有比直接使用 mvn
更好的选择?
我知道我的要求不寻常,单元测试应该更加独立等等,但请让我们一起玩吧:)
最佳答案
您可以使用 embedded Tomcat正是为了这个目的。只需在您的测试工具中设置一个静态实例,然后在最后关闭它。下面是一些示例代码:
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.junit.AfterClass;
import org.junit.BeforeClass;
public class TomcatIntegrationTest {
private static Tomcat t;
private static final int TOMCAT_PORT = 9999;
@BeforeClass
public static void setUp() throws LifecycleException {
t = new Tomcat();
t.setBaseDir(".");
t.setPort(TOMCAT_PORT);
/* There needs to be a symlink to the current dir named 'webapps' */
t.addWebapp("/service", "src/main/webapp");
t.init();
t.start();
}
@AfterClass
public static void shutDownTomcat() throws LifecycleException {
t.stop();
}
}
关于java - 是否可以有一个 "in-process"Tomcat 实例,用于测试目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409797/