成功测试
成功测试

您现在的位置: 成功测试简介_成功测试分数 > 成功测试答案 > 3个C单元测试工具,到底谁才是王者

3个C单元测试工具,到底谁才是王者

发布时间:2023/4/13 11:37:19   点击数:
北京中科白癜风医院路线 http://m.39.net/pf/a_4349554.html

  DotCover结果显示:

NunitnamespaceCalculatorPkg.Tests

{

//添加TestFixture标识类是测试类

[TestFixture]

publicclassNUnitTest

{

//初始化

[SetUp]

publicvoidSetup()

{

IMoneyExfeed=this.PrvGetMockExchangeRateFeed();

calculator=newCalculator(feed);

Console.WriteLine(beforetest...);

}

//测试用例分类,跳过测试方法

[Test(Description=Add1with1.Expectedresultis2.)]

[Category(add)]

[Ignore(Methodisignored)]

publicvoidTC0_Add1With1()

{

intactualResult=calculator.Add(1,1);

intexpectedResult=2;

Assert.AreEqual(expectedResult,actualResult);

}

//带参测试方法

[Test()]

[Category(sub)]

[TestCase(0,1)]

[TestCase(1,1)]

[TestCase(2,1)]

publicvoidTC0_SUB(inta,intb)

{

intactualResult=calculator.Subtract(a,b);

intexpectedResult=a-b;

Assert.AreEqual(expectedResult,actualResult);

}

//测试divide方法,以及测试用例排序

[Test(Description=Divide9by3.Expectedresultis3.)]

[Category(divide)]

[Order(2)]

publicvoidTC1_Divide9By3()

{

Console.WriteLine(TC1_Divide9By3:+DateTime.Now.TimeOfDay.ToString());

doubleactualResult=calculator.Divide(9,3);

intexpectedResult=3;

Assert.AreEqual(expectedResult,actualResult);

}

//异常判断

[Test(Description=Divideanynumberbyzero.ShouldthrowanSystem.DivideByZeroExceptionexception.)]

[Category(divide)]

[Order(3)]

publicvoidTC2_DivideByZero()

{

Console.WriteLine(TC2_DivideByZero:+DateTime.Now.TimeOfDay.ToString());

Assert.That(()=calculator.Divide(9,0),Throws.TypeOfDivideByZeroException());

}

//mock实例

[Test(Description=Convert1USDtoRMB.Expectedresultis.)]

[Category(convert)]

[Order(1)]

publicvoidTC3_ConvertUSDtoRMBTest()

{

Console.WriteLine(TC3_ConvertUSDtoRMBTest执行时间:+DateTime.Now.TimeOfDay.ToString());

intactualResult=calculator.ConvertUSDtoRMB(1);

intexpectedResult=;

Assert.AreEqual(expectedResult,actualResult);

}

//后处理

[TearDown]

publicvoidTeardown()

{

Console.WriteLine(aftertest...);

}

}

}   DotCover结果显示:

执行顺序结果:

图NUnit测试用例执行顺序验证

即执行情况符合规定的顺序。

XUnit.NETnamespaceCalculatorPkg.Tests

{

publicclassXUnitCal

{

//测试用例分类,跳过测试方法

[Fact(Skip=Methodisignored)]

[Trait(Category,add)]

publicvoidTC0_Add1With1()

{

IMoneyExfeed=this.PrvGetMockExchangeRateFeed();

ICalculatorcalculator=newCalculator(feed);

intactualResult=calculator.Add(1,1);

intexpectedResult=2;

Assert.Equal(expectedResult,actualResult);

}

//带参测试方法

[Theory()]

[Trait(Category,multi)]

[InlineData(0,1)]

[InlineData(1,1)]

publicvoidTC0_multi(inta,intb)

{

IMoneyExfeed=this.PrvGetMockExchangeRateFeed();

ICalculatorcalculator=newCalculator(feed);

intactualResult=calculator.Multipy(a,b);

intexpectedResult=a*b;

Assert.Equal(expectedResult,actualResult);

}

[Fact()]

[Trait(Category,divide)]

publicvoidTC1_Divide9By3()

{

IMoneyExfeed=this.PrvGetMockExchangeRateFeed();

ICalculatorcalculator=newCalculator(feed);

doubleactualResult=calculator.Divide(9,3);

intexpectedResult=3;

Assert.Equal(expectedResult,actualResult);

}

//异常判断

[Fact()]

[Trait(Category,divide)]

publicvoidTC2_DivideByZero()

{

IMoneyExfeed=this.PrvGetMockExchangeRateFeed();

ICalculatorcalculator=newCalculator(feed);

//doubleactualResult=calculator.Divide(9,0);

Assert.ThrowsDivideByZeroException(()=calculator.Divide(9,0));

}

//mock实例

[Fact()]

[Trait(Category,convert)]

publicvoidTC3_ConvertUSDtoRMBTest()

{

IMoneyExfeed=this.PrvGetMockExchangeRateFeed();

ICalculatorcalculator=newCalculator(feed);

intactualResult=calculator.ConvertUSDtoRMB(1);

intexpectedResult=;

Assert.Equal(expectedResult,actualResult);

}

}

}   DotCover结果显示:

工具对比

本次调研重点研究的三款C#单元测试工具(MsTest、NUnit、XUnit.NET)来说,使用区别度并不是很大,具体如下:

MsTest作为内置的visualstudio测试工具来讲,操作简单,易于使用;另外,如果已经使用visualstudio作为编译器,不用做任何的安装即可使用,也是其较为明显的优点之一。但是其也存在在带参测试时不能同时支持异常判断,以及无法对测试用例排序等缺点。

NUnit作为比较成熟的C#单元测试工具,好处包括可以按名称空间进行测试分组,添加测试用例注释(使用相同的参数多次运行相同的测试)及对测试用例排序等功能,并且它与Opencover和ReportGenerator进行覆盖分析的效果很好。主要的缺点是它没有像MSTest那样集成,但是通过Nuget现在在visualstudio中使用NUnit已经成为一件比较容易的事情。NUnit还有一个不同于其它测试工具的特点是NUnit2中有自己的GUI,可以不通过VS来看单元测试结果,但是如上所说,GUI只在NUnit2中提供,而现在普遍使用的都是NUnit3。

XUnit.NET作为NUnit的进阶简化版,是一种和NUnit及其相似的简单现代的单元测试框架。XUnit.NET不同于其它测试工具的特点主要有两个:一是取消了单元测试框架中的前后处理方法,为每个测试方法都创建测试类的新实例,即提高了测试用例之间的隔离性;二是用断言替代了属性的方式来捕捉异常,不采用Attribute的方式来捕捉异常有两方面的好处:在代码中直接断言(Assert)能捕捉到更多种类的异常;遵守Arrange-Act-Assert(or3A)模式:即测试命名上“范围-作用-断言”规范。但是正是由于其简化的特性,其缺点也显而易见,即一些高阶的测试可能无法用XUnit完成,并且和NUnit一样,XUnit与VS的集成没有MsTest那么自然。

总结

本次调研重点测评了三款C#开源单元测试工具,对其特性及基本使用进行了介绍。其实在开源社区蓬勃发展的今天,众多开源工具之间的区别也通过很多次迭代渐渐在缩小,如本次重点调研的三款工具虽各有优势和劣势,但是差异已经不再那么明显,大家在使用时结合自身的业务背景来选择合适的工具即可。



转载请注明:http://www.81guangchang.com/cgda/16966.html

网站简介 | 发布优势 | 服务条款 | 隐私保护 | 广告合作 | 合作伙伴 | 版权申明 | 网站地图

当前时间:


冀ICP备20001468号-10