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

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

码农世界 2024-05-17 前端 62 次浏览 0个评论

目录

一、NUnit的安装(Visual Studio)

二、NUnit常见Attribute的使用

三、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 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#-单元测试NUnit框架的安装及使用》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,62人围观)参与讨论

还没有评论,来说两句吧...

Top