java - 是否可以有一个 "in-process"Tomcat 实例,用于测试目的?

标签 java tomcat testing maven junit

我有一个基于 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/

相关文章:

java - 列出类的所有字段,如果它们与所需类型匹配,则将它们放入列表中

java - 强制小程序仅加载一次

java - 通过 http 集成两个 Java webapps 的 IO 错误

unit-testing - Go 中的测试是并行执行还是一个一个执行?

java - "Type Mismatch: Cannot Convert from int to ResultSet"

java - 系统.out.println(4 | 3)

java - Tomcat/websocket 响应错误 404

tomcat - 同时使用Tomcat和JIRA

android - 为什么在扩展 AndroidTestCase 的测试类中,getContext() 是否返回 null?

testing - 填充os.Stdin以读取其中的函数