NUnit使用开源工具来测试.NET代码

258 阅读6分钟

NUnit使用开源工具来测试.NET代码

单元测试是现代应用开发的一个重要部分。NUnit也许是将其用于.NET代码的最知名的方式。

现代应用开发依赖于测试。软件开发生命周期已经发展到采取测试优先的方法,测试的设计与代码的要求相同。这种模式的核心是单元测试,确保你的代码的每个模块都能正确响应输入,并提供预期的输出。

这需要在你写第一行代码之前就开发测试,提供一个框架,确保CI/CD(持续集成和持续交付)系统中的所有代码在组装成应用程序或服务之前已经通过功能测试。这种测试优先的方法是敏捷开发方法的核心,给冲刺阶段一个可以衡量进度的目标。

[也在InfoWorld上:如何用左移测试改进CI/CD]

介绍NUnit

你需要在开发过程的早期选择一个测试框架,为你的开发平台找到一个合适的工具。Java开发者可能会选择熟悉的JUnit,而.NET开发者可能会选择类似的NUnit。NUnit和JUnit是由最初的Smalltalk SUnit测试框架衍生出来的松散的工具家族的一部分,它们都建立在一个类似的架构上,使用测试运行器来运行测试,用案例来描述测试,用夹具来管理状态和测试的上下文,所有这些都被包装成一套要通过的测试。

NUnit是相关工具系列的一部分,所以你可以把其他平台的现有测试开发技能带到.NET上(反之亦然)。测试是用.NET语言编写的,但底层概念和结构仍然相似,确保学习曲线最小。这里有大量的文档,所以你应该能够很快上手并运行。你并不局限于Windows应用程序;它还支持测试使用Xamarin编写的移动应用程序

就像.NET平台的大部分其他部分一样,NUnit是一个由.NET基金会支持的开源项目。它的核心开发团队在社区中很有名,已经在该项目上工作了十多年。目前的版本,即第3版,是一次重大的重写,最新的版本在2022年3月底推出,增加了对.NET 6的改进支持。如果你开始在.NET框架中使用NUnit测试,你可以把同样的测试工具带到基于.NET核心的新版本,确保你的测试可以和你的代码一起迁移到当前的.NET版本。

开始使用NUnit

NUnit是简单明了的。像许多.NET工具一样,为了运行测试框架,你需要的包从NuGet安装,或者可以作为Windows安装程序下载。首先,在你的解决方案中安装NUnit和NUnit.Console包。第一个需要从你的测试代码中引用,但不是从你的应用程序中引用。如果你想在多个解决方案中使用NUnit的中央存储库,请下载并安装zip文件,将其添加到你的路径中。然后,你可以从你所有的测试中引用相同的NUnit DLL,无论他们测试的是哪个应用程序。

建立你的第一个测试是相对简单的。一旦你在Visual Studio解决方案中添加了对NUnit的引用,你就可以开始在一个测试项目中构建测试。因此,如果你的代码在一个叫做AppCode的项目中,你将在同一个解决方案中为你的测试创建一个平行项目,例如AppCode.NUnit。这应该是用来用适当的测试来反映你的代码的方法和类。

在你的项目中,从NuGet中安装最新版本的NUnit。为你的测试创建一个文件并添加对NUnit.Framework的引用,准备编写你的测试。对大多数.NET语言都有支持,所以你可以用C#、F#、Visual Basic.NET或托管C++来工作在测试和代码中使用相同的语言是一个好主意,以确保你正确地调用方法。

关于命名测试类和方法的最佳实践有一些争论。你可以在测试中对类或方法的名称使用测试前缀或后缀,或者给它们起与应用程序中相同的名字。我倾向于后一种方法,因为它可以帮助你确保你的测试有正确的代码覆盖率,并且可以快速看到应用程序的哪些部分没有被测试调用。

设计和运行测试

使用NUnit的大部分工作是关于设置适当的属性和参数来管理和运行测试。这些在你的测试中标记类和方法,例如,将类标记为TestFixture,方法标记为Test。

一个测试在你的应用程序中用一个预定义的值或一组值调用一个方法。这是用来验证响应的,它使用一个断言来比较方法的响应和预期值。在某些情况下,这个值需要被计算出来。例如,如果你使用一个方法来提供一个基于外部数据的响应,你的测试将需要相同的数据来计算一个预期值。你可以做很多事情来为你的代码建立适当的测试。NUnit使用一个基于约束的模型来处理断言,事实证明它非常灵活,能很好地适应不同的方法及其输入和输出。

一旦写好,就需要运行测试。这可以从NUnit控制台或Visual Studio的NUnit适配器中完成。这最后一个选项可能是你运行大量测试作为编写代码的一部分的最佳选择。通过在你的IDE中运行测试,你可以确保对代码的修改不会破坏应用程序。如果你打算把NUnit作为CI/CD过程的一部分,在批准拉动请求之前自动测试,或者作为构建的一部分,使用.NET CLI来运行你的测试。

长期以来,NUnit一直是最受欢迎的.NET单元测试工具之一。它的约束和参数驱动的测试设计和开发方法为你提供了一种灵活的方法来构建测试,并与你的代码的类和方法一起管理它们。由于测试需要在代码之前建立,你可以使用你的需求捕获和设计过程来构建一组单元测试的第一遍,使用它们来定义你的方法和API。

测试优先的开发确实为你的软件开发生命周期增加了纪律--纪律对于一个成功的敏捷开发过程是必不可少的。你的测试是与你的代码签订的合同,允许你在构建代码和添加功能时确保它满足要求。新的测试功能可以被添加,而且因为测试是代码,它们和应用程序一起被存储在你的存储库中。设计良好的测试也许最好被认为是你的代码文档的一部分,使未来的开发者能够快速理解你的代码的意图,并进行必要的更新、修正和移植。

相关的: