我希望在我的软件开发项目中使用Visual中的Microsoft测试框架来实现自动化测试。我已经创建了一些测试,总之,它非常容易使用。
哪些是更好的实践用于测试业务对象,更具体地说是那些读取和写入数据库的业务对象。
最好是从开发数据库中建立一个独立的测试数据库,在那里测试用户界面,并对该数据库进行测试吗?基本上就是用垃圾数据填充它。
如果我在测试AddUser方法时,我是否应该添加用户,检查我的测试,然后删除用户,这是否更好呢?
您是否在单个测试方法中测试每个CRUD方法?
最后,验证字符串的大小、开始日期小于结束日期、CustomerId是正确的客户等单个业务规则如何?
我知道这是个很宽泛的问题..。只是在找方向..。迈出一小步。
更多信息.
很多好答案!我不确定我能不能找到一个模拟数据库。我使用CSLA作为我的对象的框架。需要进行一些严肃的重构,才能使这个模拟对象可以测试。我要调查这件事。不过,在某种程度上,我确实想测试数据库的交互.当使用模拟数据库时,您将在哪里/何时实际测试数据库通信?
另一个问题..。是否最好保持每个测试方法不依赖于其他测试?
发布于 2009-02-14 04:20:59
理想情况下,您的业务对象不是直接访问数据库,而是使用助手对象或某种类型的ORM (对象-关系映射)框架。然后,您可以在没有数据库的情况下测试您的BOs,可能还可以模拟一些助手对象。这可能是最干净的方法,因为您避免了真实DB的复杂性,而实际上只测试您的业务逻辑。
如果您无法避免将业务规则和DB访问组合到一个类中(可能是一个有问题的设计,但有时很难避免),那么您必须针对一个DB进行测试。
有几乎唯一合理的选择是拥有一个独立的数据库进行自动测试。您的测试方法应该删除安装程序上的所有内容,然后加载它们的所有数据,进行测试并验证结果。
甚至不要考虑尝试初始化DB一次,然后在相同的数据上运行所有测试。一个测试会意外地更改数据,而另一个测试将神秘地失败。我做过这件事,后悔过.每一个测试都必须是独立的。
为此,我强烈推荐某种DB测试框架。这些帮助您清理数据库,加载必要的数据,并将查询结果与预期结果进行比较。我使用DBUnit (用于Java),但对于其他语言,还有很多其他语言。
发布于 2009-02-14 04:17:48
我建议实现您的业务对象,以便它们不知道数据库。使用数据访问层上的方法,这些方法可以根据业务对象的类型正确地保存/检索业务对象(也就是说,它在表和它们对应的对象之间有一个内部映射)。在测试业务对象本身时,您根本不需要担心数据库。只需创建对象,也许可以使用反射设置私有字段,并对对象进行测试。
当测试需要与数据访问层交互的代码时,请使用模拟创建模拟数据层,并设置对其的期望,以返回所需的对象或正确响应保存。您可能需要将数据层开发为接口(如果使用不支持直接模拟的刚性框架,则需要将其封装为可模拟的类)。大多数模拟框架都要求方法是虚拟的,以允许创建模拟实现。使用接口强制实现类中的方法是虚拟的,因此模拟要容易得多。
发布于 2009-02-14 04:25:28
使用依赖注入。在接口中实现数据库方法。然后用控制数据编写一个新的接口实现来测试适用的场景。
https://stackoverflow.com/questions/548405
复制相似问题