【发布时间】:2009-12-30 03:21:17
【问题描述】:
我是一名大学生,用 C# 编写程序,主要是科学模拟。学习NUnit有什么用吗?
我一直听到人们谈论它,但我一开始并没有完全理解它是什么。它是每个程序员都应该使用的东西,还是更适合人多的大项目?
【问题讨论】:
-
我希望我在大学时学习过单元测试。这些年来,我会省去很多痛苦。
标签: c# unit-testing nunit
我是一名大学生,用 C# 编写程序,主要是科学模拟。学习NUnit有什么用吗?
我一直听到人们谈论它,但我一开始并没有完全理解它是什么。它是每个程序员都应该使用的东西,还是更适合人多的大项目?
【问题讨论】:
标签: c# unit-testing nunit
测试是编写软件的重要组成部分 - 任何类型的软件。 无论您是编写一个小程序来对数字进行排序,还是编写一个用于发射太空船的系统火星。
现在开发人员会编写他们的代码,然后手动运行它 - 通常在调试器中 - 以验证它是否符合他们的预期。这是测试他们的代码的一种痛苦而乏味的方式。这不仅乏味且痛苦 - 而且不可重复。这意味着每次您进行更改时,您都必须手动重复测试,并希望您不会忘记任何事情或做事略有不同。 质量受损 - 有很多悲伤和哭泣。
最终,开发人员意识到他们可以编写一个单独的程序,通过在他们期望它处理的条件下运行代码并让该代码验证结果来运行他们的代码。 情况开始好转。这种测试方法通常被称为 test harness。
编写测试工具有帮助,但有很多重复的代码 - 有很多与运行和验证测试相关的基础设施。然而,一些真正聪明的开发人员说:“我们不会一遍又一遍地编写样板代码......我们将创建一个库来为我们做这件事。” 于是像JUnit 和NUnit(以及许多其他)这样的单元测试工具诞生了。
这些库(和工具)可帮助您构建、组织和执行测试。它们提供了方便的方法来验证条件、捕获和跟踪异常,并报告哪些测试通过了哪些测试失败了。最后,开发人员可以专注于重要部分:编写有助于确保他们编写的代码有效的测试和验证逻辑。这些测试是可重复的。它们可以作为automated build 进程的一部分运行。它们可以代代相传,并在发现和修复新的故障点时被其他人添加。在编写原始代码数月和数年后,原始开发人员可以重新运行它们,以确保一切正常。
如果您计划在任何级别、任何规模的组织(即使只是您自己)中成为一名成功的软件开发人员 - 您应该了解 - 并且 拥抱 单元测试。
这里有一些资源可以帮助您顺利上路:
【讨论】:
是的,您应该使用它。 (或任何测试运行器)
测试是编程中相当重要的一部分(在我看来),所以如果您(或其他人)更改了代码的一部分,并且碰巧破坏了某些内容,那么您的测试应该 拿起这个。
嗯,这就是我的看法,我还是单元测试的新手。
一个例子。
假设我有一个方法
Add(int a, int b)
{
return a + b;
}
我的单元测试是:
[Test]
public void Test001_TestAdd()
{
Assert.IsTrue(Add(1,3) == 4);
}
如果有人将添加方法更改为让我们说:
Add(int a, int b)
{
return a * b;
}
我的单元测试会失败,并且可能会挽救生命(如果您从事医疗软件或为 NASA 工作),或者阻止潜在的错误 :)
现在如果they 有单元测试,这可能不会发生,简单的问题,错过了。
【讨论】:
当然。单元测试是现代软件开发中最重要的概念之一。
无论您的程序是科学模拟、企业应用程序等,无论您是在一个大团队中还是您独自编写代码(但在大团队中与编译代码一样重要),都没有关系。
一本关于单元测试(对于.net)的好书是Pragmatic Unit Testing in C# with NUnit
【讨论】:
每个程序员都应该学习它。现在,每个程序员都会使用它吗?可能不会,但无论如何他们都应该知道。
单元测试现在非常非常普遍,除了您现在正在编写的小爱好之外,了解它的工作原理对于任何项目都是必不可少的。利用你现在拥有的时间,为你的未来做好准备。还可以了解 Mock 对象(相关)。
【讨论】:
单元测试有很多价值,具体取决于您所做的工作以及您在单元测试的不同部分中从事的项目对您来说是否重要。
至少您应该学习单元测试的基础知识,以全面了解开发过程。随着时间的推移,您从事大型项目,您会发现单元测试是维护和发展大型代码库不可或缺的一部分。
【讨论】:
如果您对Test-Driven Development 感兴趣,NUnit 是一款出色的工具。
有关 TDD 的一些说明,请参阅我的回答 here。
我发现如果你能获得ReSharper 许可证(Visual Studio 插件,很多 事情),单元测试的运行变得如此快速和容易,以至于真正编写它们确实变得很容易,即使是很小的工作。
【讨论】: