我需要在3层架构中实现TDD。
书籍和博客中的示例在测试字符串中字符的出现情况或测试N层应用程序时测试堆栈的Pop function.But时是有意义的,在N层应用程序中,我们有UI、业务层和数据层,数据层依次调用所需的存储过程并获取数据。
TDD背后的概念是隔离执行测试,这意味着我们必须模拟或伪造数据。
但我对这种方法的怀疑是,TDD测试应该是什么。我所理解的是,它测试例如GetCustomer函数是否返回预期的结果。
现在我的问题是,如果存储过程有一个Bug,那么TDD将无法捕获该Bug,因为数据不是使用Buggy存储过程提取的。另外,如何测试调用存储过程的业务和数据层函数,该存储过程实现了所有业务规则。
还有,如何为CRUD操作实现TDD?
任何例子都会对全面理解拓展署的概念有很大帮助。
问候
发布于 2012-01-05 04:19:24
编写测试是为了证明满足了功能和业务需求。因此,我针对正在使用的类的公共接口进行编码。公共接口向下钻取到内部和私有类。如果在较低级别抛出异常,或者函数返回错误的数据,我将在针对业务规则的测试中捕获该异常。
例如,如果Employee是一个业务类,并且它调用了EmployeeSerializer.GetAll(),那么我只需要测试Employee.GetAll。如果EmployeeSerializer()没有返回正确的数据,我会知道的。如果EmployeeSerializer抛出一个意外的异常,我会知道的。如果EmployeeSerializer没有抛出正确的异常,我会知道的。
不要通过编写测试代码来验证实现细节。对它们进行编码以测试业务规则。这意味着您要测试业务对象。为了促进这项工作,我将我的数据访问对象标记为内部对象,因此我不能在预期使用它们的业务上下文之外对它们进行测试。
但这就是我,我相信其他人也会有不同的看法。
附录:尽可能将业务规则排除在存储过程之外。此外,使用Setup和TearDown设置已知测试。请记住,测试将测试整个业务规则。您可以自由地执行尽可能多的工作来设置测试,只要测试在隔离状态下执行,并且在测试完成时可以将环境恢复到其原始状态。因此,如果您想插入数据,请确保您有一个执行此操作的业务类方法。更新、删除和选择也是如此。
发布于 2012-01-05 13:07:31
首先,我要说的是,多读一点关于Mocks的知识(你模拟角色...而不是数据/对象)。
W.r.t.对于你的例子,我会有
除此之外,在合同双方对另一方应该如何表现有不同想法的情况下,可能存在错误。为此,您需要编写一些端到端的验收测试,以测试连接在一起的所有组件(就像它们在生产中一样)。
TDD可以用于上述所有功能。
https://stackoverflow.com/questions/8733187
复制相似问题