单元测试(C#)

3

我正在进行一些增删改查操作的单元测试,我的问题是:

1)如果我需要测试Add、Get和Delete方法。持久层是一个数据库。由于我需要有一个测试对象来进行Get和Delete测试,那么我应该将这3个方法合并为一个[TestMethod],还是将它们分为3个方法,在进行Get和Delete测试之前重新添加对象?


你好 :) 我会将其分开并逐个进行测试,确保在每次之前都进行清理和设置,并在每次之后进行清理。 - Tim Barrass
1
我不确定涉及数据库的测试是否仍然可以称为“单元测试”... - Lukasz
@Lukas Baran 在不访问数据库的情况下测试DAO(数据访问对象)无法显示查询、DDL等隐藏的错误。可以使用内存数据库或在提交之前进行测试。确实,对DAO进行单元测试与集成测试代码有很多共同之处,但仍然可以使用单元测试框架进行测试。 - tobsen
5个回答

5

理想情况下,您应该为每个案例编写单独的测试。

您应该使用某种模拟 - 通过框架或自己设置数据库 - 来为每个测试设置初始条件。

因此,要测试添加,您将从空数据库开始,然后添加一些新数据,尝试再次添加相同的数据(应该失败),添加不完整的数据等。

然后,要测试获取和删除,您将从预填充的数据库开始执行所需的各种测试。


根据我们的文档,我只需要将对象添加到数据库中,所以我在这一点上还不愿意开始使用模拟。谢谢。 - Joe

2
我通常会创建单独的测试。如果我正在测试“get”类型的方法,则测试设置将插入所需的对象(通常通过某些模拟框架),但不会以与实际获取相同的方式进行断言。
这意味着,如果添加实现出现问题,则假设覆盖正确,则获取和添加的测试都将以某种方式失败。但这正是您想要的,对吧?

2
如果你正在编写自己的ORM来处理CRUD,我建议你将每个操作分别放在不同的测试中。不要创建大型测试,因为这样会有很多失败点和很多改变的原因,从而使你的测试项目难以维护。请分别测试每个功能。
现在,如果你正在使用第三方ORM来处理CRUD,除非你不信任它,否则不应该对工具进行测试。但是,在这种情况下,你应该寻找更好的替代方案。 :)
你可以进行一些验收测试来检查是否一切正常,并在此时真正访问数据库。

一个人永远不应该强行使用工具 ;) - Patrick McDonald

1

无论什么让测试变得更容易 :) 只要你得到一个返回声明哪种方法通过/失败了,那就应该没问题。


只是为了增加一些思考的食物,我个人使用nunit进行测试,这里有一个使用testmethod的示例http://www.nunit.org/index.php?p=quickStart&r=2.2.10 - Dasupalouie

1

你好 :) 我会分开测试每个部分,并在每个部分之前进行清理和设置,以及在每个部分之后进行清理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接