• 周六. 4月 20th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

实现VS2010整合NUnit进行单元测试

admin

11月 28, 2021

1、下载安装NUnit(最新win版本为NUnit.3.2.1.msi) http://www.nunit.org/index.php?p=download

2、下载并安装VS的Visual Nunit 2010 插件  http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099

注:可通过VS的“视图”->“其他窗口”找到并打开该插件(快捷键:Ctrl+F7)

3、新建测试项目UnitTestApp(示例为简单的控制台应用程序),引入nunit.framework类库(默认安装后文件所在路径:C:Program Files C:Program FilesNUnit.orgframework3.2.1.0
et-4.0
unit.framewor.dll)

4、添加Calculator类,实现一个简单加法和获取单例方法

namespace UnitTestApp
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }

        private static readonly object objSync = new object();
        private static Calculator instance = null;

        public static Calculator GetInstance()
        {
            if (instance == null)
            {
                lock (objSync)
                {
                    if (instance == null)
                    {
                        instance = new Calculator();
                    }
                }
            }
            return instance;
        }

    }
}

5、新增NUnitTest类进行单元测试

using NUnit.Framework;

namespace UnitTestApp
{
    [TestFixture]
    public class NUnitTest
    {
        [Test]
        public void AddTest()
        {
            var calc = new Calculator();
            var result = calc.Add(1, 1);
            Assert.AreEqual(2, result);
        }

        [Test]
        public void AddTestFailure()
        {
            var calc = new Calculator();
            var result = calc.Add(1, 1);
            Assert.AreEqual(10, result);
        }

        [Test]
        public void SingtonTest1()
        {
            var calc = Calculator.GetInstance();
            Assert.IsNull(calc);
        }

        [Test]
        public void SingtonTest2()
        {
            var calc1 = Calculator.GetInstance();
            var calc2 = Calculator.GetInstance();
            Assert.IsTrue(object.Equals(calc1, calc2));
        }
    }
}

View Code

编译控制台项目,点击Visual Nunit 插件的“Run”按钮,然后一目了然。

注:在上面的代码中引用 NUnit.Framework,使用TestFixture标注这是用于测试的类,在其中使用 Test表示具体的测试用例。可以看到单元测试中最重要的是断言,其他完全交给框架自动化。测试结果可以通过插件及时看到:

demo下载:UnitTestApp

参考:http://www.cnblogs.com/leoo2sk/archive/2010/01/13/pragmatic-unit-testing-with-nunit.html

http://www.cnblogs.com/dudu/archive/2011/07/26/unit_testing_constructor_dependency_injection.html

基础知识:

      [TestFixture]表示:类包含了测试代码(这个特性可以被继承)。这个类必须是公有的,这个类还必须有一个默认构造函数。

  [Test]表示它是一个测试方法。测试方法的返回值必须为void并且不能带有参数

  [SetUp]属性:用来标识方法,在开始所有测试之前执行,用来在测试前初始化一些资源,比如初始化类。

      [TearDown]属性:用来标识方法,在所有测试完成之后执行,用来释放一些资源。

  [Ignore]属性:用来标识方法,指示这个方法由于某些原因暂时不需要测试(比如没有完成相关代码) 

Nunit常用类和方法

Assert(断言):

  如果断言失败,方法将没有返回,并且报告一个错误。

  如果一个方法中包括了多个断言,在失败的断言之后的所有断言将不会被执行。基于这个原因,最好是为每个测试的断言使用try语句。

  1、测试二个参数是否相等

Assert.AreEqual( int expected, int actual );
Assert.AreEqual( decimal expected, decimal actual );
。。。。

  2、测试二个参数是否引用同一个对象

Assert.AreSame( object expected, object actual );
Assert.AreNotSame( object expected, object actual );

  3、测试一个对象是否被一个数组或列表所包含

Assert.Contains( object anObject, IList collection );

  比较断言:

  4、测试一个对象是否大于另一个对象

Assert.Greater( int arg1, int arg2 );

  5、测试一个对象是否小于另一个对象

Assert.Less( int arg1, int arg2 );

  类型断言:

Assert.IsInstanceOfType( Type expected, object actual );

  条件测试:

Assert.IsTrue( bool condition );
Assert.IsFalse( bool condition);
Assert.IsNull( object anObject );
Assert.IsNotNull( object anObject );
Assert.IsNaN( double aDouble );
Assert.IsEmpty( string aString );
Assert.IsNotEmpty( string aString );
Assert.IsEmpty( ICollection collection );
Assert.IsNotEmpty( ICollection collection );

 字符串断言(StringAssert):提供了许多检验字符串值的有用的方法

StringAssert.Contains( string expected, string actual );
StringAssert.StartsWith( string expected, string actual );
StringAssert.EndsWith( string expected, string actual );
StringAssert.AreEqualIgnoringCase( string expected, string actual );

《实现VS2010整合NUnit进行单元测试》有3个想法
  1. Hey! Do you know if they make any plugins to help with SEO?
    I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good success.
    If you know of any please share. Appreciate it! I saw similar article here: Backlinks List

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注