使用 NUnit 和 MonoDevelop 设置测试项目
如何在 MonoDevelop 中设置 NUnit 测试项目。
介绍
本文旨在尝试创建一些关于 NUnit 和 MonoDevelop 的文档。在网上搜索了一番徒劳无功后,我决定撰写本文;可能已经有相关文档,但我找不到。本文基于 UbuntuStudio 8.04 上的 NUnit 2.2.8.0 和 MonoDevelop 1.0。让我最困惑的是 MonoDevelop 有一个名为“NUnit 程序集测试集合”的项目模板;如果有人能解释一下它用于什么或如何使用,我很乐意更新本文或链接到其他文章。总而言之,使用 NUnit 与 MonoDevelop 并不那么显而易见,我不确定这是否是最佳实践,但它对我有效。
我遇到的一个关于指导的建议是,建议为解决方案中的每个项目都创建一个测试项目。我个人喜欢这个概念,因为它清晰且直观地将测试与实际代码分离开来。是否将测试项目包含在同一个解决方案中取决于您自己。按照以下简单步骤开始对代码进行单元测试。请记住,这绝不是一篇全面的单元测试文章。如果您正在阅读本文,我假设您知道什么是单元测试以及为什么要使用它们。
在这个例子中,我们将创建一个控制台应用程序,添加一个库,并为该库创建一个单元测试。
- 运行 MonoDevelop。
- 按照这里的教程创建解决方案、控制台应用程序和库。
- 像在教程中一样,向解决方案中添加另一个库,并将其命名为
MyLibraryTest
。 - 将
MyLibraryTest
->MyClass.cs 重命名为 MyClassTest.cs。 - 打开
MyLibraryTest
->MyClassTest.cs,并将类重命名为MyClassTest
。注意:您可以通过右键单击类的名称并选择 Class->MyClass->Rename 轻松重命名该类。 - 从
MyLibraryTest
项目中,添加对MyLibrary
项目的引用,以及对nunit.framework
程序集的引用。在“编辑引用”窗口中,选择“包”选项卡,然后搜索 nunit(在 Ubuntu 中,您只需开始键入 nunit,窗口就会自动滚动)。 - 在
MyLibraryTest
->MyClassTest.cs 中,在“using System;
”语句之后添加以下using
语句using MyLibrary; using NUnit.Framework;
- 将以下属性添加到
MyClassTest
[TestFixture]
- 将以下方法添加到
MyLibrary
->MyClass.cspublic int Divide(int number1, int number2) { int result; try { result = number1 / number2; } catch(DivideByZeroException) { result = -1; } return result; }
-
将以下方法添加到
MyClassTest
[Test] public void DivideTest() { MyClass mc = new MyClass(); int result = mc.Divide(12, 6); Assert.AreEqual(2, result); // // Dividing by zero should result in -1 since the function handles this case. result = mc.Divide(0, 22); Assert.AreEqual(-1, result); }
-
执行您的测试
- 选择 View | Unit Tests 以调出单元测试窗口。
- 在单元测试窗口中右键单击测试,然后选择 Run Test。
- 选择 View | Test Results 以查看结果。
- 测试结果
- 选择 View | Unit Tests 以调出单元测试窗口。
总之,使用 NUnit 和 MonoDevelop 开始 TDD 相对容易。我希望 NUnit 和/或 MonoDevelop 的某个人能够阅读这篇文章并说“你说对了!”或者“这完全是垃圾”。无论如何,我希望您觉得这篇文章足够有用,可以开始。此外,非常感谢您提供的任何反馈。祝您编码愉快!
背景
- 熟悉测试驱动开发
Using the Code
从 此处 下载压缩的代码示例,并使用 MonoDevelop 打开它。
关注点
我发现 MonoDevelop 1.0 没有内置的调试器。显然,您可以获取一个插件,但我建议等待今年发布的 MonoDevelop 2.0。 这里列出了功能。
我在 Ubuntu 上注意到的一件事是 MonoDevelop 1.0 经常崩溃。我不确定这是否与我正在进行的单元测试有关,但我希望 2.0 更稳定。
我注意到即使有一个除以零异常的捕获,测试仍然失败。你能找出原因吗?
历史
- [3.22.2009 更新]
- 主要更改,包括更多实际的解决方案和测试设置
- [3.19.2009 更新]
- 找到了以下相关 文章
- [3.18.2009 更新]
- 修复了代码块显示
- 更新了源代码,将单元测试拆分出来,每个方法一个