用于JDBC连接的JUNIT测试用例

时间:2014-03-12 14:36:49

标签: java testing jdbc exception-handling junit

我只是想知道,我如何测试JDBC连接并形成JUNIT测试用例!请问有什么想法吗?

3 个答案:

答案 0 :(得分:1)

单元测试不适合覆盖数据库连接。相反,集成测试涵盖了这一点。假设您处理JDBC的类有一个返回Connection的方法,您可以为不是nullisValid的连接编写测试来提交查询并执行它们。这是使用Spring和JUnit 1 进行此集成测试的示例:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "/your/resource/package/your-spring-config.xml" })
public class YourJdbcClassTest {

    //this will inject an instance of the class that access and manages your JDBC resources
    @Autowired
    YourJdbcClass yourJdbcClass;

    //test the database connection
    @Test
    public void testGetConnection() throws SQLException {
        Connection con = yourJdbcClass.getConnection();
        Assert.assertNotNull(con);
        Assert.assertTrue(con.isValid(0));
        con.close();
    }
}

然后,只需为与JDBC交互的其他方法创建测试。只是要添加,这可以用于代码覆盖,但如果您使用Spring或任何其他已经处理资源注入的框架(如Connection),那么这种测试将是无用的,因为它每个集成测试用例都包括在内。


1 请注意,将Sprint添加到JUnit测试中可以使您进行集成测试。来自official documentation

  

测试是企业软件开发不可或缺的一部分。本章重点介绍IoC原理对单元测试的增值以及Spring Framework对集成测试的支持的好处。

答案 1 :(得分:1)

问题是我不认为JDBC连接是一个需要经过单元测试的问题。 JDBC连接依赖于环境,您的单元测试应仅依赖于您的代码(以及与测试相关的资源)。也许您需要的是设置集成测试(http://searchsoftwarequality.techtarget.com/definition/integration-testing),即便如此我也不确定它是否是您需要的。

如果您需要检查开发工作站的JDBC连接,请注意您放入单元测试的所有内容都将在整个测试套件中执行(即使在CI环境中也是如此,假设您有一个),因此它可能会污染如果你有一个,你的持续集成和交付流程。如果您需要在开发工作站中检查某些内容,最好请求您的IT或运营部门在其工作站设置过程中检查或包括端口开口等。

答案 2 :(得分:1)

简短的回答是不要。

答案越长,除非您针对您将要使用的数据库的实际实例运行,否则此类测试并非真正测试系统,只是它的近似值和说Oracle和H2SQL之间会有很多意外的差异。如果您针对数据库的实际实例运行,这将减慢您的测试套件的速度,这通常会导致它无法按预期运行。

请记住,测试不是(不应该)从开发人员桌面运行。它们应该在CI服务器上运行,在发布过程中等等 - 所有这些都需要自己的数据库实例,以及最新的更新。这是可行的,但比它的价值更麻烦。

因此,将DB访问纳入单元测试的原因是一个坏主意,但仍需要测试

就个人而言,我将与数据库交互的测试视为集成测试(使用CondordionFitNesse编写),这些测试在一天中针对已知环境中已安装的系统/数据库实例运行。理想情况下,数据库更新应该是自动的,系统的安装和启动也应该是自动的。