当前位置: 首页 > 知识库问答 >
问题:

使用Spring的JDBCTemplate对内存数据库进行Jersey e2e集成测试

卢宜然
2023-03-14

使用Jersey测试框架提供程序inmemory、h2数据库和org为Jersey REST API设计和运行e2e集成测试的正确方法是什么。springframework。jdbc。果心JdbcTemplate?

要求:

测试范围应该是端到端的:从资源开始,通过所有应用程序到h2数据库。

写作测试:

目前,如果从IDE的JUnit一起运行,我的JUnit集成测试会失败,主要是因为它们相互干扰(与JUnit同时运行)。另一个问题是这些应该在每次测试后回滚,使用事务支持(当前@Transactional注释没有任何帮助)。支持此类测试所需的Spring工具的最小集合是什么?如何使其工作?@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-故障安全-插件执行:

故障保护插件文档建议在容器终止时,将容器开始绑定到集成前测试阶段和集成后测试阶段。如果我的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();
    }
}

最好能看到工作示例代码。

共有2个答案

鞠泰平
2023-03-14

嗨,泽西岛提供了大量的示例作为泽西岛示例。托管rest服务的每个模块都有一组junit测试用例。

示例可以从jersey下载页面下载。https://jersey.java.net/download.html

下面给出了确切的链接,将来可能会更改。

对于所有可用版本:

http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jersey-examples

对于当前最新版本:

http://repo1.maven.org/maven2/org/glassfish/jersey/bundles/jersey-examples/2.23.1/jersey-examples-2.23.1-all.zip

桂志诚
2023-03-14

我认为您的场景非常适合dbunit测试。使用dbunits,将为每个要执行的测试用例生成内存中的数据库,并在测试用例执行完成时销毁。此数据库的数据模型完全取决于您配置的数据集xml。看看这个:http://archive.oreilly.com/pub/post/dbunit_made_easy.html

 类似资料:
  • 我有一个Spring Data JPA存储库,只要不添加Spring Security性依赖项(spring-boot-starter-security)并在存储库上添加相应的方法授权注释,单元测试就可以正常工作。添加后,在运行单元测试时,我会得到一个AuthenticationCredentialsNotFound异常。 如何在单元测试中“验证”对存储库方法的调用?

  • 主要内容:1、JdbcTemplate概念及使用,2、JdbcTemplate 操作数据库(添加),3、JdbcTemplate 操作数据库(修改和删除),4、JdbcTemplate 操作数据库(查询返回某个值),5、JdbcTemplate 操作数据库(查询返回对象),6、JdbcTemplate 操作数据库(查询返回集合),7、JdbcTemplate 操作数据库(批量操作),8、JdbcTemplate 实现批量修改操作1、JdbcTemplate概念及使用 a)Spring 框架对 J

  • 我有一个在mySQL上运行的小型数据库应用程序。 我想使用H2进行测试。 我向build.gradle添加了必要的依赖项: runtimeOnly’com。h2数据库:h2' 然而,我注意到,在完成测试之后,我的mySQL数据库包含测试期间生成的字段,就好像spring没有使用H2一样。 有什么问题吗?

  • 我正在尝试将Spring Boot应用程序的一些集成测试从迁移到。目前,测试使用的是 当测试运行时,被配置为使用与服务器运行时相同的基本URL和(随机选择的)端口。 在我的一个测试中,我登录并保存authorization-response头值,以便在后续的API调用中使用。我试着将它迁移到,就像这样 但是当我像这样创建实例时,它没有配置为使用与应用程序相同的端口。 我尝试使用的依赖注入实例 这确

  • 我用spring boot创建了一个spring网络项目。想了解有关测试的实践。我需要一个内存中的嵌入式数据库,比如hsql或h2,用于具有初始schema.sql的JUnit。在主应用程序上,数据库可以是mysql或oracle 在非spring boot项目中,我们通常会有一个单独的applicationcontext.xml一个由web应用程序引用的应用程序,对于测试,我们会使用applic

  • 问题内容: 如果我使用内存数据库而不是PostgreSQL,则集成测试的运行速度会更快。我使用JPA(休眠),并且我需要一个内存数据库,该数据库很容易切换为使用JPA,易于设置且可靠。它需要相当广泛地支持JPA和Hibernate(或者反之亦然),因为我不想采用我的数据访问代码进行测试。 鉴于上述要求,哪个数据库是最佳选择? 问题答案: 对于 集成测试 ,我现在使用H2(来自HSQLDB的原始作者