中国新闻社官方网站,用群晖nas做网站,番禺网站建设系统,wordpress表白系统METest是一个用于测试C#代码的单元测试框架。单元测试是一种软件测试方法#xff0c;用于验证代码的各个单元#xff08;函数、方法、类等#xff09;是否按照预期工作。METest提供了一种简单而强大的方式来编写和运行单元测试。
TestMethod#xff1a;这是一个特性#…METest是一个用于测试C#代码的单元测试框架。单元测试是一种软件测试方法用于验证代码的各个单元函数、方法、类等是否按照预期工作。METest提供了一种简单而强大的方式来编写和运行单元测试。
TestMethod这是一个特性用于标记测试方法。Assert这是一个断言类用于验证测试结果是否符合预期。DataTestMethod属性用于标记一个方法作为参数化测试方法。DataRow属性用于提供参数值每个参数值对应一个测试用例。
使用单元测试测试
点击VS项目解决方案 MSTest单元测试项目
建好单元项目引入需要测试的项目
AAA准备、执行、断言模式
是编写待测试方法的单元测试的常用方法
准备Arrange)单元测试方法的准备部分初始化对象并设置传递给待测试方法的数据执行Act执行部分调用具有准备参数的待测试方法断言Assert断言部分验证待测试方法的执行行为与预期相同。
[TestMethod()]
public void GetTriangle_Test()
{// arrange string[] sideArr { 5, 5, 5 }; // 准备传给待测试方法的数据string expected 等边三角形;// act var actual UnitTestClass.GetTriangle(sideArr); // 调用测试方法// assert Assert.AreEqual(expected, actual); // 验证待测试方法的执行结果是否与预期相同
}参数化测试
同样的逻辑根据输入参数不同给出不同的结果。因为只是参数不同所以并不希望把测试方法写多遍但是又希望对每个参数的测试成为一个独立的测试用例。举例说假定我有一个数学计算的方法是把两个整数相加求和我希望证明这个方法对于任意两个数都是通过的。
[DataTestMethod] //注明这个方法是参数化测试方法
[DataRow(0508)] //一组参数参数可以是任何值但是一定要和参数的测试方法匹配。
[DataRow(0509)]
[DataRow(0005)]
public void GetFlag(string name)
{//act 执行部分 调用具有准备参数的待测方法var r fun.Flag(D, R, name);//assert 断言部分 验证预期和实际结果是否相同Assert.AreEqual(name, r);
}这里有一个要点参数的个数设置多少个因为测试的方法适合三个参数所以大部分的人都认为是三个参数就够了其实不是应该是四个参数还有一个是结果值。看上面的代码我们最后断言的标准是期望值和实际值进行对比而期望值是来自参数组
测试示例1
using Autofac;
using MerryDllFramework;
using Microsoft.VisualStudio.TestTools.UnitTesting;namespace MsTestMerryDLL
{[TestClass]public class UnitTest1{Functional fun;private static IContainer Container{set;get;}[ClassInitialize]public static void ClassInitialize(TestContext testContext){// 在测试类初始化之前进行调用的方法}[TestInitialize]public void TestInitialize(){// 在每个测试方法执行之前进行调用的方法ContainerBuilder builder new ContainerBuilder();builder.RegisterTypeFunctional().AsFunctional().SingleInstance();Container builder.Build();fun Container.ResolveFunctional();var res fun.USB(D, 1);Assert.AreEqual(expected: True, res);}[TestCleanup]public void TestCleanup(){// 在每个测试方法执行之后进行调用的方法var res fun.USB(D, 0);Assert.AreEqual(True, res);}[DataTestMethod][DataRow(0508)][DataRow(0509)][DataRow(0005)]public void GetFlag(string name){// 测试方法var r fun.Flag(D, R, name);Assert.AreEqual(name, r);}}
}