NUnit(或NUnitLite)和.NET CF的“入门”问题

时间:2009-02-28 11:28:15

标签: unit-testing compact-framework nunit

我有一个现有的VS 2005 Std .NET Compact Framework应用程序,我想对其进行一些重大的重构。目前没有单元测试,但我想在搞乱代码之前添加它。我没有单元测试的实践经验,尽管我知道这个理论(只是从来没有实际实现它;我知道:对我感到羞耻:-)) 以下是我正在思考的一些问题:

a)作为初学者,我应该使用NUnit还是NUnitLite(声称更容易使用)?

b)我是否应该在移动设备或桌面上运行测试(当然,特定于设备的代码除外)?目前,桌面看起来更具吸引力,特别是在自动构建中包含测试......

c)我想测试的课程通常如何包含在测试项目中?我的应用程序是一个.EXE文件,即我不能像测试项目中的.DLL程序集一样引用它(或者我可以吗?从未尝试过这个......)。我检查了各种NUnit教程,但是没有发现它,或者有一个教程建议将我要测试的类复制并粘贴到测试项目中(yuk!)。我应该链接到我的测试项目中的原始源代码文件吗?那些私有方法或对其他类的依赖呢?

d)我是否应该开始修改我的原始代码以提高测试性,例如私有方法公开,解耦等?这有点像重构之前能够测试,这对我来说听起来不太好......或者在开始时根本不触摸原始代码是更好的做法,即使这意味着更少的代码覆盖等等。 / p>

e)我应该查看大多数人使用的任何其他工具或插件吗?

提前感谢您的任何答案(如果只是上述一项或部分内容,我也会感谢您的答案。)

2 个答案:

答案 0 :(得分:7)

首先,我会向您推荐一本关于单元测试的好书:Pragmatic Unit Testing in C#

它将向您介绍NUnit,但更重要的是,作者将为您提供很多建议,如何编写良好单元测试。 xUnit测试框架不是很复杂,你会很快习惯他们的API /工作流程。挑战是识别边界条件,减少耦合和可测试性设计的实际过程。它可以作为电子书(PDF)或印刷版本。

关于你的实际问题(这本书也会给你一些答案):

  • @a)我没有NUnit lite的经验,因此我无法就此提出任何建议。
  • @b)单元测试在其依赖性方面应该是非常本地的。您的目标是彼此独立地测试类,因此不需要首先在移动设备上部署它。您不会运行完整的应用程序,只是单独测试组件。因此,我建议您使用台式机作为单元测试环境的目标。你也会有更好的周转时间。
  • @c)您必须引用包含要在测试项目中测试的类的程序集。测试项目将是一个程序集本身(DLL)。测试运行器执行此程序集并使用存储的元信息来运行包含的测试用例。
  • @d)这在很大程度上取决于软件的状态和设计。但总的来说,我会使用分而治之的策略:在类之间引入接口并开始逐步重构。在开始更改实现之前编写单元测试。接口保持合同正常运行,但您可以根据需要更改基础实现。不要公开私有方法只是为了使它们可测试。私有方法是类的内部帮助程序,支持公共方法完成工作。由于您测试了公共方法,因此您将断言您的私有方法是正确的。
  • @e)Visual Studio的一个有用的补充是TestDriven.Net。它允许您直接从IDE运行NUnit测试,而无需更改为NUnit的GUI或控制台运行程序。

答案 1 :(得分:2)

@c)我还没有尝试过,但我认为VisualStudio会让你将测试程序集中的项目引用添加到你的实际代码程序集中,即使它是一个exe文件。

对于私有方法等,通常我不测试私有方法。从理论上讲,所有私人资料都应该由公共或内部方法使用,因此测试这些方法应该间接地对私人进行测试。

我确实测试了公共和内部。我觉得非常有用的一件事是InternalsVisibleTo属性:

[assembly:InternalsVisibleTo("MyTestAssembly")]

可用于使一个组件的内部对另一个组件可见。我使用此属性将内部公开给我的测试程序集,以便它可以直接引用它们。