首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试业务对象?

如何测试业务对象?
EN

Stack Overflow用户
提问于 2009-02-14 03:09:52
回答 8查看 4.4K关注 0票数 6

我希望在我的软件开发项目中使用Visual中的Microsoft测试框架来实现自动化测试。我已经创建了一些测试,总之,它非常容易使用。

哪些是更好的实践用于测试业务对象,更具体地说是那些读取和写入数据库的业务对象。

最好是从开发数据库中建立一个独立的测试数据库,在那里测试用户界面,并对该数据库进行测试吗?基本上就是用垃圾数据填充它。

如果我在测试AddUser方法时,我是否应该添加用户,检查我的测试,然后删除用户,这是否更好呢?

您是否在单个测试方法中测试每个CRUD方法?

最后,验证字符串的大小、开始日期小于结束日期、CustomerId是正确的客户等单个业务规则如何?

我知道这是个很宽泛的问题..。只是在找方向..。迈出一小步。

更多信息.

很多好答案!我不确定我能不能找到一个模拟数据库。我使用CSLA作为我的对象的框架。需要进行一些严肃的重构,才能使这个模拟对象可以测试。我要调查这件事。不过,在某种程度上,我确实想测试数据库的交互.当使用模拟数据库时,您将在哪里/何时实际测试数据库通信?

另一个问题..。是否最好保持每个测试方法不依赖于其他测试?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-02-14 04:20:59

理想情况下,您的业务对象不是直接访问数据库,而是使用助手对象或某种类型的ORM (对象-关系映射)框架。然后,您可以在没有数据库的情况下测试您的BOs,可能还可以模拟一些助手对象。这可能是最干净的方法,因为您避免了真实DB的复杂性,而实际上只测试您的业务逻辑。

如果您无法避免将业务规则和DB访问组合到一个类中(可能是一个有问题的设计,但有时很难避免),那么您必须针对一个DB进行测试。

有几乎唯一合理的选择是拥有一个独立的数据库进行自动测试。您的测试方法应该删除安装程序上的所有内容,然后加载它们的所有数据,进行测试并验证结果。

甚至不要考虑尝试初始化DB一次,然后在相同的数据上运行所有测试。一个测试会意外地更改数据,而另一个测试将神秘地失败。我做过这件事,后悔过.每一个测试都必须是独立的。

为此,我强烈推荐某种DB测试框架。这些帮助您清理数据库,加载必要的数据,并将查询结果与预期结果进行比较。我使用DBUnit (用于Java),但对于其他语言,还有很多其他语言。

票数 8
EN

Stack Overflow用户

发布于 2009-02-14 04:17:48

我建议实现您的业务对象,以便它们不知道数据库。使用数据访问层上的方法,这些方法可以根据业务对象的类型正确地保存/检索业务对象(也就是说,它在表和它们对应的对象之间有一个内部映射)。在测试业务对象本身时,您根本不需要担心数据库。只需创建对象,也许可以使用反射设置私有字段,并对对象进行测试。

当测试需要与数据访问层交互的代码时,请使用模拟创建模拟数据层,并设置对其的期望,以返回所需的对象或正确响应保存。您可能需要将数据层开发为接口(如果使用不支持直接模拟的刚性框架,则需要将其封装为可模拟的类)。大多数模拟框架都要求方法是虚拟的,以允许创建模拟实现。使用接口强制实现类中的方法是虚拟的,因此模拟要容易得多。

票数 5
EN

Stack Overflow用户

发布于 2009-02-14 04:25:28

使用依赖注入。在接口中实现数据库方法。然后用控制数据编写一个新的接口实现来测试适用的场景。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/548405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档