2010-04-06 62 views
0

是否有任何书籍或文章向您展示如何使用NUnit来测试程序的全部功能?这种类型的测试是否有名字?关于使用NUnit测试整个功能的书籍或文章

这与NUnit在测试单个类的单元测试中的典型用法不同。这与验收测试类似,不同之处在于它由开发人员编写,以识别该程序是否按照客户希望该程序执行的内容进行解释。我不需要它可以被非程序员读取,也不需要为非程序员提供可读的规范。

我遇到的问题是保持此功能测试代码的可维护性。我需要帮助组织我的功能测试代码。我还需要帮助组织程序代码以这种方式进行驱动。我很难在向程序发出命令的同时仍然具有良好的代码设计。

目前我有一个名为程序与一个名为运行一个公共方法类。每次测试时,我都会从程序的开始处开始,就像用户一样,然后到达程序中需要特定功能的地方。然后我以某种方式使用该功能,并验证它做了我想要的。我有一个叫做Commands的类,它将程序的不同特性公开为方法。 Commands对象的一个​​实例被传递给程序,并最终传递给每个Form类。这些将订阅由命令类的方法调用的Commands类的事件(每个方法一个匹配事件)。这些事件是通过指向在使用用户界面的某个部分时调用的方法来订阅的,因此可以通过我的测试来驱动整个程序。如果您针对当前未订阅的事件在Command对象上调用方法,则会引发FeatureMissingException。

所有这些工作,但我不喜欢Command类。它负担太重(程序的每个功能)都太大了。 Commands类也是一个依赖磁铁(所有Form类都有它的一个实例,但只订阅表示可以通过它们的UI激活的功能的事件)。

回答

2

它被称为integration testing。集成测试更难以实现自动化,并且通常是手工完成的。尽管许多简单的测试仍然可以使用NUnit来完成 - 你不必使用任何特殊的东西,只是不要使用Mocks(就像你应该为单元测试做的那样),这样你就可以测试这些模块如何实际组合在一起。

Context/specification是组织这些测试的好方法。

+0

感谢您告诉我这是集成测试。在发布我的问题之前,我查看了集成测试,我认为这是另一回事。使用继承为测试提供上下文在理论上听起来不错,但是当我在实践中尝试这样做时,它导致了令人生畏的测试代码。此外,这仍然不能解决我的问题,即如何在保持良好设计的同时,向整个系统发出命令而不是单个类。 – 2010-04-06 22:01:55

2

你想要做的是integration testing,就像其他答案所暗示的那样。这将允许您进行功能/功能测试。最常见的框架为StoryQSpecFlow。这允许您以BDD风格开发测试,并且可以根据所需的规范自动进行大部分自动化。

Selenium这样的工具允许您在浏览器中进行功能测试,以完成最终用户的工作。所有这些都可以使用NUnit驱动,因为NUnit纯粹是运行测试的框架,因为它们是单元测试到大功能测试

+0

感谢您提供的工具建议,并告诉我第一个回答者对这个集成测试是正确的。我看过其他类似的工具,但SpecFlow看起来非常容易使用。这仍然不能解决我如何使整个程序可以驱动而不是处理单个类的主要问题。我会在我的问题中添加更多细节。 – 2010-04-06 22:06:21