帮助编写JUnit for JDBC

时间:2011-02-04 07:42:29

标签: java unit-testing junit

我创建了一个类,我在其中将值插入SQL,如下所示:

  public class ABC{
     some code here..........
   ...............
    public void insertUsers(String firstName,String lastName,String location){
      pre.setString(1,firstName);

我为这个类创建了测试类。

我想使用assert语句为此方法insertUsers()编写测试用例。 如何为上述方法编写断言语句。

4 个答案:

答案 0 :(得分:2)

当进行单元测试时,应该避免访问外部资源,例如数据库,文件系统,网络等。这是为了将测试保持在内存中(快速),但也与外部故障隔离。您只想测试某些功能的特定部分,例如一个班级,没有别的。

这对您来说意味着需要模拟conn变量(我假设是数据库连接)。您可以使用 dependency injection 之类的内容轻松完成此操作,这意味着您在构建它时会将内容传入您的类。在这种情况下,您将传入一个具有conn使用的必要函数的接口。

然后在生产中,您传入真正的数据库连接对象,而在测试中,您传入一个您控制的模拟。因此,您可以检查ABC来电,并按照conn执行您希望的操作。对于你正在使用的pre也是如此。

你可以这样看:我想测试课程ABC,为了做到这一点,我需要看看它如何使用preconn,所以我更换那些有我自己的测试实现的人,我可以在用ABC做一些事后检查。

为了明确地帮助您完成您正在做的事情,您需要展示pre是什么,并告诉我们您打算测试什么。

答案 1 :(得分:2)

如果您真的想测试更新数据库,那么您可以这样做。通常人们会遵循以下两种方法之一 -

  1. 使用Spring AbstractTransactionalDataSourceSpringContextTests这允许您向数据库添加任何值,然后spring将注意并恢复您插入的值。

  2. 使用单独的数据库仅适用于您的JUnit测试。你真的不需要任何沉重的东西。你可以使用类似HSQLDB的东西,它实际上是一个轻量级的java数据库。这将允许您从生产/ QA数据库中获得单独的测试数据。

  3. 完成上述操作后(并运行了insert语句),只需从JUnit运行select语句即可获取数据,然后将之前的数据与实际数据进行比较。

答案 2 :(得分:1)

几句话。

我只在开发期间使用标准assert。如果条件的计算结果为false,它将检查条件并抛出运行时异常。

如果您期望非法参数,那么向该方法添加一些“正常”代码以处理这些值或抛出IllegalArgumenException并写入日志条目会好得多。

请勿在此方法中关闭连接!当您以相同的方法打开/创建连接时,只执行 。在较大的应用程序中,您将无法找到在一段时间后关闭连接。如果insertUsers的呼叫者打开了连接,则呼叫者应自行关闭它!

(如果您告诉我们您想要测试的 - 方法参数或插入是否成功),可以提供更多帮助

答案 3 :(得分:0)

我不会测试数据插入到数据库中,实际上它在单元测试期间无法访问数据库,这可以覆盖你应用程序的自动化功能GUI测试工具。

您可能想要测试的是生成预期的查询,这可以实现,如果您分离geenration和执行语句,您将能够将生成的语句与预期的语句进行比较,而无需访问您的数据库最单纯的。