gpt4 book ai didi

rest - 在 Maven WebApp 项目下使用嵌入式 Tomcat 7/junit 测试 RESTFul Spring 3 服务

转载 作者:行者123 更新时间:2023-12-01 15:55:03 26 4
gpt4 key购买 nike

目的是,对于每个单元测试,系统地启动一个 tomcat 7 服务器,加载 spring 应用程序(最终删除/创建一个模式并在数据库中初始化它的数据)执行单元测试并停止 http 服务器。
使用 jetty 嵌入式服务器很容易找到示例

我没有找到配置嵌入式 tomcat 7 服务器以加载 spring 上下文的正确方法
你能帮我么 ??

项目结构是一个名为“myApp”的标准 maven webApp 项目

src
+-main
+-java
+-webapp
+-static
+-WEB-INF
+-web.xml
+-applicationcontext.xml
target
+-myApp
+-webapp
+-static
+-WEB-INF
+-classes

抽象单元测试:
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.apache.catalina.Context;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.catalina.core.StandardServer;
import org.apache.catalina.startup.Tomcat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"applicationContext.xml"})
public abstract class AbstractMainHTTPTestCase
{

private int PORT;
private Tomcat tomcat;
private String appBase;
private String contextPath;
private String hostname;
private String baseDir;
public Client client;
public WebResource webResource;
public String response;


@Before
public final void setUp() throws Exception
{
this.PORT = 8081;
this.appBase = "src/main/webapp";
this.contextPath = "";
this.baseDir = ".";
this.hostname = "localhost";

this.tomcat = new Tomcat();
this.tomcat.setPort(this.PORT);

this.tomcat.setBaseDir(this.baseDir);
this.tomcat.getHost().setAppBase(this.appBase);
this.tomcat.setHostname(this.hostname);
Context ctx = this.tomcat.addWebapp(this.contextPath, this.appBase);

File contextFile = new File(this.appBase + "/WEB-INF/web.xml");
ctx.setConfigFile(contextFile.toURI().toURL());

this.tomcat.start();
this.tomcat.getServer().await();
}

@After
public final void tearDown() throws Exception
{
this.tomcat.stop();
}
}

以及用于测试 URL 的典型测试类:
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.sproutcore.sample.todos.AbstractMainHTTPTestCase;

public class MainControllerTest extends AbstractMainHTTPTestCase
{

private static final Logger LOG = LoggerFactory.getLogger(MainControllerTest.class);

@Test
public void staticTest() throws Exception
{
LOG.debug("HTTP TEST: staticTest");
this.response = this.webResource.path("/static/test.txt").get(String.class);
LOG.debug("staticTest response: {}", this.response);
assertNotNull("Static test shall be not null", this.response);
}

}

静态文件夹在applicationcontext.xml中配置:
<!-- Handles HTTP GET requests for /static/** -->
<mvc:resources mapping="/static/**" location="/static/" />

这种工作方式/允许人们首先编写单元测试并创建数据单元测试,然后编写应用程序功能。使用 maven 打包应用程序时会自动执行测试。您也可以生成测试报告...最佳实践...

最佳答案

你能更具体地说明什么不适用吗?

我认为这可能是两件事。

第一个。 this.tomcat.getServer().await();
阻塞线程,因此不会调用任何测试方法,我正在浏览相同的内容,如果您的代码来自 http://www.copperykeenclaws.com/embedding-tomcat-7/ , 这仅在 main-method 中有意义

第二。这可能是个问题

@ContextConfiguration(locations = {"applicationContext.xml"})

这个注解让 JUnit-Runner 加载 spring 配置。所以我可以想象当tomcat再次加载 Spring 配置时可能会发生冲突。

关于rest - 在 Maven WebApp 项目下使用嵌入式 Tomcat 7/junit 测试 RESTFul Spring 3 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com