我有一个现有的VS 2005 Std .NET Compact Framework应用程序,我想对其进行一些重大的重构。目前没有单元测试,但我想在搞乱代码之前添加它。我没有单元测试的实践经验,尽管我知道这个理论(只是从来没有实际实现它;我知道:对我感到羞耻:-)) 以下是我正在思考的一些问题:
a)作为初学者,我应该使用NUnit还是NUnitLite(声称更容易使用)?
b)我是否应该在移动设备或桌面上运行测试(当然,特定于设备的代码除外)?目前,桌面看起来更具吸引力,特别是在自动构建中包含测试......
c)我想测试的课程通常如何包含在测试项目中?我的应用程序是一个.EXE文件,即我不能像测试项目中的.DLL程序集一样引用它(或者我可以吗?从未尝试过这个......)。我检查了各种NUnit教程,但是没有发现它,或者有一个教程建议将我要测试的类复制并粘贴到测试项目中(yuk!)。我应该链接到我的测试项目中的原始源代码文件吗?那些私有方法或对其他类的依赖呢?
d)我是否应该开始修改我的原始代码以提高测试性,例如私有方法公开,解耦等?这有点像重构之前能够测试,这对我来说听起来不太好......或者在开始时根本不触摸原始代码是更好的做法,即使这意味着更少的代码覆盖等等。 / p>
e)我应该查看大多数人使用的任何其他工具或插件吗?
提前感谢您的任何答案(如果只是上述一项或部分内容,我也会感谢您的答案。)
答案 0 :(得分:7)
首先,我会向您推荐一本关于单元测试的好书:Pragmatic Unit Testing in C#。
它将向您介绍NUnit,但更重要的是,作者将为您提供很多建议,如何编写良好单元测试。 xUnit测试框架不是很复杂,你会很快习惯他们的API /工作流程。挑战是识别边界条件,减少耦合和可测试性设计的实际过程。它可以作为电子书(PDF)或印刷版本。
关于你的实际问题(这本书也会给你一些答案):
答案 1 :(得分:2)
@c)我还没有尝试过,但我认为VisualStudio会让你将测试程序集中的项目引用添加到你的实际代码程序集中,即使它是一个exe文件。
对于私有方法等,通常我不测试私有方法。从理论上讲,所有私人资料都应该由公共或内部方法使用,因此测试这些方法应该间接地对私人进行测试。
我确实测试了公共和内部。我觉得非常有用的一件事是InternalsVisibleTo属性:
[assembly:InternalsVisibleTo("MyTestAssembly")]
可用于使一个组件的内部对另一个组件可见。我使用此属性将内部公开给我的测试程序集,以便它可以直接引用它们。