使用Spring的JPRING的Jinge-in-memory database的Jage e2e集成测试
为泽西岛 REST API 设计和运行 e2e 集成测试的正确方法是什么,该 API 使用 、 h2 数据库和 ?jersey-test-framework-provider-inmemory
org.springframework.jdbc.core.JdbcTemplate
要求:
测试范围应该是端到端的:从资源开始,通过所有应用程序到h2数据库。
编写测试:
目前,如果从IDE的JUnit一起运行,我的JUnit集成测试将失败,主要是因为它们相互干扰(与JUnit同时运行)。另一个问题是那些应该在每次测试后回滚,使用事务支持(目前注释没有任何帮助)。支持这种测试所需的Spring工具的最小集合是什么?如何使它工作?应该放在其他任何地方吗?@Transactional
@Transactional
例:
@Transactional
public class OrderResourceIT extends JerseyTest {
@Override
protected Application configure() {
// config
}
@Override
protected void configureClient(final ClientConfig config) {
// config
}
@Before
public void startUp(){
// database bootstrap programmatically before each test
}
@Test
@Transactional
public void testGetOrders(){
Response response = target("/orders")
.request()
.get();
List<Order> orders = response.readEntity(new GenericType<List<Order>>(){});
// asserts
}
}
执行:
它计划通过以下方式执行:maven-failsafe-plugin
故障安全插件文档建议将容器绑定到容器终止时和在容器终止时。如果我的容器是以编程方式配置的,如何配置?示例:pre-integration-test phase
post-integration-test
jersey-container-grizzly2-http
public class Main {
// Base URI the Grizzly HTTP server will listen on
public static final String BASE_URI = "http://localhost:8080/myapp/";
public static HttpServer startServer() {
// create a resource config that scans for JAX-RS resources and providers
// in com.example.rest package
final ResourceConfig rc = new ResourceConfig().packages("com.example.rest");
// create and start a new instance of grizzly http server
// exposing the Jersey application at BASE_URI
return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
}
public static void main(String[] args) throws IOException {
final HttpServer server = startServer();
System.out.println(String.format("Jersey app started with WADL available at "
+ "%sapplication.wadl\nHit enter to stop it...", BASE_URI));
System.in.read();
server.stop();
}
}
看到工作示例代码将是完美的。