使用 NUnit 工具来进行单元测试
首先在要创建一个单元测试的项目,通常在原有的解决方案中添加新项目, 在弹出的项目类型中选择单元测试,项目的命名一般情况下与解决方案的名称相同后加UnitTest
然后在项目中添加一个单元测试的类, 类的名称与要测试的类的名字相同,也是后缀加UnitTest, 在单元测试项目中添加引用 NUnit.Framework.dll, 而后在单元测试的类的头部添加引用 using NUnit.Framework;
在测试类的上部添加特性 [TestFixture] 表示: 要对这个类进行测试
然后创建一个测试方法, 测试方法的名字命名与测试类的命名相同, 就是在要测试的方法名后缀Test,在测试的方法上面要添加特性[Test] 表示的是: 这是个测试的方法,如果没有什么语法错误,对单元测试项目进行重新编译。
using System; using System.Text; using System.Collections.Generic; using System.Linq; using Demon; using NUnit.Framework; namespace DemonUnitTest { /// <summary> /// CalcuteTest 的摘要说明 /// </summary> [TestFixture] public class CalcuteTest { Calculate mycal = new Calculate (); [Test] public void GetSumTest() { int a =4; int b =6; int sum =mycal.GetSum(a,b); Assert.AreEqual(10,sum); } [Test] public void GetResultTest() { int result = mycal.GetResult(5); Assert.AreEqual(15, result); } } }
打开 Nunit, 选择file --> open project 找到刚才单元测试项目中生成的 dll 文件, 选择确定。这样在 nunit 中就能看到里面的测试方法,对每一个测试方法进行运行,如果出现绿色,那么恭喜你,测试通过,如果出现红色的警告,则表示方法没有通过测试,可以根据测试的结果反馈信息来对编写的方法进行修改,直到能达到预期效果,也就是通过单元测试。
还有一种方法就是在项目中直接使用vs 自带的单元测试功能 一般在创建项目时,就会提示是否要添加单元测试项目, 默认的情况下,会创建一个与解决方案同名的后缀Test的单元测试项目。这种情况下,通过添加单元测试模板来添加单元测试类,与 NUnit不同的是, 要引用vs 自带的单元测试框架 using Microsoft.VisualStudio.TestTools.UnitTesting;
在单元测试的类上添加特性 [TestClass] 表示的是这是一个测试类 在测试的方法上添加特性 [TestMethod] 表示的是这是一个测试方法
测试方法的编写与 NUnit 方法相同,但是通过打断点,调试的方式来进行测试的
using System; using System.Text; using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace DemonUnitTest { /// <summary> /// CalcuteTest2 的摘要说明 /// </summary> [TestClass] public class CalcuteTest2 { public CalcuteTest2() { // //TODO: 在此处添加构造函数逻辑 // } private TestContext testContextInstance; /// <summary> ///获取或设置测试上下文,该上下文提供 ///有关当前测试运行及其功能的信息。 ///</summary> public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #region 附加测试特性 // // 编写测试时,可以使用以下附加特性: // // 在运行类中的第一个测试之前使用 ClassInitialize 运行代码 // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // // 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码 // [ClassCleanup()] // public static void MyClassCleanup() { } // // 在运行每个测试之前,使用 TestInitialize 来运行代码 // [TestInitialize()] // public void MyTestInitialize() { } // // 在每个测试运行完之后,使用 TestCleanup 来运行代码 // [TestCleanup()] // public void MyTestCleanup() { } // #endregion [TestMethod] public void TestMethod1() { // // TODO: 在此处添加测试逻辑 // } Demon.Calculate mycal = new Demon.Calculate(); [TestMethod] public void GetSumTest() { int a = 4; int b = 6; int sum = mycal.GetSum(a, b); Assert.AreEqual(10, sum); } } }
总之不能为了通过单元测试而进行测试,或修改测试方案,这样即使通过了单元测试,但隐藏了方法的错误算法设计或逻辑处理,当在待定或着实际的场境下,问题还是会暴露的,所以应该严格对待单元测试,不能为了单元测试而测试。