繁体   English   中英

通过JUnit DAO类进行测试

[英]Test via JUnit DAO class

我有一个DAO类,我需要在其中测试名为getItemById()的方法,该方法从DB的表中返回Item对象。

据我了解,我必须在该测试中创建一个Item对象,并检查它是否等于从方法返回的值? 还是我只需要检查它是否返回Item对象?

如果表为空或根本没有该ID的行怎么办?

抱歉,这是一个相当新手的问题,但我不清楚。 请帮忙!

在无法预测数据库内容的数据库上运行测试是无效的。 为了确认被测代码是否确实做正确的事,任何具有足够弹性以容纳变化数据的测试都将一文不值。 我将使测试使用其自己的数据库实例,这样就不会受到其他用户干扰我的测试的干扰,也不会因为我的测试从其他人那里更改数据而产生干扰。 理想的选择是像H2这样的内存数据库,测试完成后可以实例化并丢弃。 这样,测试可以在任何地方(例如,在CI服务器上)运行,并获得相同的结果。

该测试需要运行ddl来创建模式并在执行之前填充数据库。 您可以为此使用不同的工具。 DbUnit很流行,还有一个名为DBSetup的替代方法,它应该不太复杂。 您可以针对不同的场景使用单独的测试数据。 DbUnit具有从数据库提取数据的工具,使创建测试数据更加容易。

由于数据库处于您的控制之下,并且您可以根据需要填充它,因此您应该验证返回的对象的字段是否正是您期望的基于填充数据的字段。 使测试尽可能具体。

为了测试SQL以及如何将对象映射到结果集,使用数据库是有意义的。 在某些情况下,使用不涉及数据库并使用模拟的单元测试将是有意义的。 例如,最好确认连接在所有情况下都已关闭,使用模拟比在代码中引起SQLException容易。

如果注入DBConnection类而不是在方法中实例化,则使用模拟进行测试会更容易。 如果更改了代码以注入DBConnection,则可以编写一个单元测试(使用不使用数据库的模拟程序进行测试),以检查连接是否关闭。

要执行单元测试,您应该遵循三个步骤:

  1. 准备测试环境(例如,用已知的测试数据填充数据库)-这样您就不会问表是否为空等。
  2. 执行测试并确认结果
  3. 进行清理-因此测试不会影响其他测试

此外,您应该测试所有方案,因为您应该处理所有方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM