0


C#-单元测试NUnit框架的安装及使用

一、NUnit的安装(Visual Studio)

通过VS菜单栏中的NuGet包管理器搜索并安装

1、若需要使用NUnit框架自带的runner运行,则在NuGet包管理器中搜索NUnit.Console安装,

安装后,在packages\NUnit.ConsoleRunner.3.X.X\tools中找到unit3-console并运行;

2、若想集成到VS上的测试平台,使用Microsoft的runner运行,则在NuGet包管理器中搜索NUnit3TestAdapter安装;


二、NUnit常见Attribute的使用

**[TestFixture] **

标识一个测试类

[Test]

标识一个无参的方法为测试用例

示例代码:

    class MyPro
    {
        public static void Main()
        {
            MyProTest proTest = new MyProTest();
            proTest.TestStringAdd();
        }
        public string StringAdd(string str1, string str2)
        {
            return str1 + str2;
        }
    }
    [TestFixture]
    public class MyProTest
    {
        [Test]
        public void TestStringAdd()
        {
            try
            {
                MyPro proTest = new MyPro();
                Assert.AreEqual("hello auston", proTest.StringAdd("hello,", "auston"));
                Console.WriteLine("Test pass");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }

[TestCase]

标识一个带参的方法为测试用例 ,可以设置测试数据及预期数据

示例代码:

        [TestCase("hello ","world",ExpectedResult ="hello,world")]
        public string TestStringAdd(string str1, string str2)
        {
            return str1 + str2;
        }
        [TestCase("hello ", "world", "hello world")]
        public void TestStringAdd(string str1, string str2, string str3)
        {
            Assert.AreEqual(str3, str1 + str2);//断言
        }

[TestCaseSource]

参数化测试中,设置测试数据的来源(实例化对象用nameof(),类用typeof())

示例代码:

        [TestCaseSource(nameof(cases))]
        public void TestStringAdd(string str1, string str2, string str3)
        {
            Assert.AreEqual(str3, str1 + str2);
        }
        static object[] cases = {
            new object[]{"lo","ng","long"},
            new object[]{"ti","me","time" },
            new object[]{"no","see","nosee" }
        };
        [TestCaseSource(typeof(Cases))]
        public void TestStringAdd(string str1, string str2, string str3)
        {
            Assert.AreEqual(str3, str1 + str2);
        }
    class Cases
    {
        public IEnumerator<object[]> GetEnumerator()
        {
            yield return new object[] { "lo", "ng", "long" };
            yield return new object[] { "ti", "me", "time" };
            yield return new object[] { "no", "see", "nosee" };
        }
    }

[TestFixtureSource]

参数化测试中,设置脚手架数据的来源(根据构造函数的参数数据),使用同上

[Setup]

运行测试用例的统一设置,每次运行测试用例都会执行一次

[TearDown]

运行测试用例的统一设置,每次运行测试用例都会执行一次

[TestFictureSetUp]与[TestFixtureTearDown]

用法同上,范围作用于整个测试类

[OneTimeSetUp]

运行测试用例前的统一设置,运行任意一个测试用例前会执行一次

[OneTimeTearDown]

运行测试用例后的统一设置,运行任意一个测试用例后会执行一次

[Ignore]

标识一个测试类或方法不应执行,NUnit3中需标明原因

示例代码:

    [TestFixture]
    [Ignore("不执行原因")]
    class MyTest
    { 
    
    }

[Category("分类名")]

给测试方法分组,测试时可运行某一组内的所有测试方法;

可与Test特性写在一起,逗号隔开,如:[Test,Category("testgroup001")];

有一个Explicit属性可显式排除该Category的运行,如:[Category("test001",Explicit=true)];

[ExpectedException(typeof(ExpectException))]或[Test,ExpectedException(typeof(ExpectException))]

该特性用于测试期望异常


三、NUnit的断言系统

NUnit提供约束模型(Constraint Model)和经典模型(Classic Model)两种断言系统

判断假设条件是否成立;

1、经典模型(Assert、StringAssert、CollectionAssert、FileAssert、DirectoryAssert)

            每种断言都有一个单独的方法,本质是由约束模型实现;

    注:已不添加新的功能。

2、约束模型(推荐)

    约束模型只有Assert.That()一种方法,但有很多重载方法(参数是约束对象,根据不同的断言类型有不同的约束对象)

常用Assert方法有:

Assert.IsTrue 用来验证条件表达式是否为真

Assert.AreEqual 验证是否与期望值相等

Assert.AreSame验证是否引用了同一个对象

3、多个断言(使用Assert.Multiple方法)

    若一个断言失败,测试不会终止,继续执行后面的断言,执行完后将结果统一返回。
标签: 单元测试 c# windows

本文转载自: https://blog.csdn.net/rwo_bear/article/details/132107441
版权归原作者 一介学徒 所有, 如有侵权,请联系我们删除。

“C#-单元测试NUnit框架的安装及使用”的评论:

还没有评论