Adr*_*scu 9 java testing junit tomcat maven
我有一个基于Maven的Web应用程序项目,它生成一个在Tomcat中运行的WAR.让我们假设,为了论证,对于该项目的单元测试来说,通过网络实际发送/接收请求是非常重要的(而不是简单地使用模拟请求调用servlet方法).
我的测试工具是否有办法在同一个JVM中运行Tomcat实例,加载当前项目,并让测试用例点击它localhost
?如果做不到这一点,我将如何以编程方式将当前项目(以及依赖项)打包到WAR中,以便我可以使用Cargo以编程方式将其上载到其他Tomcat实例中?有没有更好的选择,而不仅仅是炮轰mvn
?
我知道我的请求很不寻常,单元测试应该更加独立,等等,但请让我们一起玩:)
您可以使用嵌入式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();
}
}
Run Code Online (Sandbox Code Playgroud)
Jetty非常适合这个目的.如果你没有被迫拥有Tomcat,你可以在集成测试阶段很容易地使用它.有预集成启动jetty,后集成停止它,你可以在war文件中抛出请求,因为它在一个实际的容器中运行.
归档时间: |
|
查看次数: |
4059 次 |
最近记录: |