这是典型的单元测试经验吗?

时间:2012-01-28 23:28:21

标签: unit-testing nunit

我写了220行,有5种公共方法。我有一个单元测试类,在这个类上运行28个测试,占用超过1200行代码,但这主要是由于重复设置测试代码。此代码在我的项目中测试DAL,以确保它与数据库正确交互,并确保所涉及的存储过程正确运行。看起来我做了很多工作来测试很少的代码。我正在使用带有Rhino模拟的模拟,以避免在可能的情况下编写自己的存根。

这是典型的单元测试经验吗?

5 个答案:

答案 0 :(得分:3)

以什么方式典型?

如果你的意思是你有比实际代码更多的单元测试代码,那么是的。但是你应该像对待“真正的”代码那样对待你的单元测试代码,因为你应该删除重复并重构它,直到它尽可能地精益/可取。

此外,如果您正在测试DAL以及与真实数据库的交互,那么您所拥有的是集成测试。

修改

我最近开始为常见的测试模式编写单元测试基类,我有很多设置代码和辅助方法。我最近的单元测试基类是一个通用的,它允许我非常容易地测试wcf-web-api类。所以,我的实际测试课程非常精简并且“非常重要”。 YMMV

答案 1 :(得分:2)

是的,这对于单元测试来说非常正常。

运行测试所需的代码大小经常被低估,特别是需要大量设置样板的代码,例如数据库访问。

虽然您可以尝试将设置代码重构为单独的方法,但这对于您所描述的情况来说非常正常。

通过28次测试,您的1200线减少到每次测试约43次。考虑到你正在重复你的设置代码,这是非常合理的。

答案 2 :(得分:2)

相当普遍单元测试类包含的LOC多于实际测试类。考虑设置依赖关系,准备伪造数据以及所有与单元测试相关的问题,这是合理的。

但是,在与数据库交互方面测试DAL并检查是否调用了正确的过程就像集成测试一样。您可能想重新考虑您想要做的事情。通过单元测试,所有数据库谈话都应该被模拟/存根。

如果您遇到1200行代码问题,可以将测试分解为 contexts ,例如。每个上下文匹配测试类的特定部分(公共方法,属性集等)。

修改

只是添加其他人也这样做的例子。您可以查看Aggregate项目中AggregateTestsEdulinq类的来源。 15个测试来测试3个公共方法,测试类是测试类的两倍。

答案 3 :(得分:1)

一个班级的28个测试听起来像是在做太多事情。

答案 4 :(得分:1)

您可能想尝试编写一些直接针对数据库运行的测试,并考虑是否更好。我发现它需要更多的工作才能完成数据库设置,但后来工作量减少了,因为我不需要伪造下层。测试运行速度较慢,但​​他们更完整地验证了测试。当然,此时它并不是真正的单元测试。