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

C-单元测试NUnit框架的安装及使用目录 一 NUnit 的安装 Visual Studio 二 NUnit 常见 Attribute 的使用 三 NUnit 的断言系统 一 NUnit 的安装 Visual Studio 通过 VS 菜单栏中的 NuGet 包管理器搜索并安装 1 若需要使用 NUnit 框架自带的 runner 运行

大家好,我是讯享网,很高兴认识大家。

目录

一、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<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方法)

        若一个断言失败,测试不会终止,继续执行后面的断言,执行完后将结果统一返回。

小讯
上一篇 2025-03-29 18:46
下一篇 2025-02-28 13:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/32351.html