我创建了一个类,我在其中将值插入SQL,如下所示:
public class ABC{
some code here..........
...............
public void insertUsers(String firstName,String lastName,String location){
pre.setString(1,firstName);
我为这个类创建了测试类。
我想使用assert语句为此方法insertUsers()编写测试用例。 如何为上述方法编写断言语句。
答案 0 :(得分:2)
当进行单元测试时,应该避免访问外部资源,例如数据库,文件系统,网络等。这是为了将测试保持在内存中(快速),但也与外部故障隔离。您只想测试某些功能的特定部分,例如一个班级,没有别的。
这对您来说意味着需要模拟conn
变量(我假设是数据库连接)。您可以使用 dependency injection 之类的内容轻松完成此操作,这意味着您在构建它时会将内容传入您的类。在这种情况下,您将传入一个具有conn
使用的必要函数的接口。
然后在生产中,您传入真正的数据库连接对象,而在测试中,您传入一个您控制的模拟。因此,您可以检查ABC
来电,并按照conn
执行您希望的操作。对于你正在使用的pre
也是如此。
你可以这样看:我想测试课程ABC
,为了做到这一点,我需要看看它如何使用pre
和conn
,所以我更换那些有我自己的测试实现的人,我可以在用ABC
做一些事后检查。
为了明确地帮助您完成您正在做的事情,您需要展示pre
是什么,并告诉我们您打算测试什么。
答案 1 :(得分:2)
如果您真的想测试更新数据库,那么您可以这样做。通常人们会遵循以下两种方法之一 -
使用Spring AbstractTransactionalDataSourceSpringContextTests这允许您向数据库添加任何值,然后spring将注意并恢复您插入的值。
使用单独的数据库仅适用于您的JUnit测试。你真的不需要任何沉重的东西。你可以使用类似HSQLDB的东西,它实际上是一个轻量级的java数据库。这将允许您从生产/ QA数据库中获得单独的测试数据。
完成上述操作后(并运行了insert语句),只需从JUnit运行select语句即可获取数据,然后将之前的数据与实际数据进行比较。
答案 2 :(得分:1)
几句话。
我只在开发期间使用标准assert
。如果条件的计算结果为false,它将检查条件并抛出运行时异常。
如果您期望非法参数,那么向该方法添加一些“正常”代码以处理这些值或抛出IllegalArgumenException
并写入日志条目会好得多。
请勿在此方法中关闭连接!当您以相同的方法打开/创建连接时,只执行 。在较大的应用程序中,您将无法找到谁在一段时间后关闭连接。如果insertUsers
的呼叫者打开了连接,则呼叫者应自行关闭它!
(如果您告诉我们您想要测试的 - 方法参数或插入是否成功),可以提供更多帮助
答案 3 :(得分:0)
我不会测试数据插入到数据库中,实际上它在单元测试期间无法访问数据库,这可以覆盖你应用程序的自动化功能GUI测试工具。
您可能想要测试的是生成预期的查询,这可以实现,如果您分离geenration和执行语句,您将能够将生成的语句与预期的语句进行比较,而无需访问您的数据库最单纯的。