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

        }
    }
}

 

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

 

posted on 2014-12-31 17:27  wisdo  阅读(353)  评论(0编辑  收藏  举报