单元测试工具NUnit的使用

来源:互联网 发布:jquery数组最大值 编辑:程序博客网 时间:2024/05/01 06:54
 

使用 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);        }    }}

 


总之不能为了通过单元测试而进行测试,或修改测试方案,这样即使通过了单元测试,但隐藏了方法的错误算法设计或逻辑处理,当在待定或着实际的场境下,问题还是会暴露的,所以应该严格对待单元测试,不能为了单元测试而测试。

 

 

0 0