7.MVC工具之单元测试

  • 时间:2019-06-02
  • 作者:Charles
  • 热度:2037

有很多.NET单元测包,其中许多是开源和免费的,本文打算使用Visual Studio附带的单元测试支持。

为了演示单元测试,对示例项目添加一个IDiscountHelper接口新实现。在Models文件夹下新建一个名为MinimumDiscountHelper的新文件,内容如下图所示。

此例的目标是让MinimumDiscountHelper演示以下行为。

       总额大于100时,折扣为10%。

       总额介于(并包括)10-100之间时,折扣为5 。

       总额小于10时无折扣。

       总额为负值时,抛出ArgumengtOutOfRangeException。

MinimumDiscountHelper类尚未实现上述任何行为,本文将遵循测试驱动开发方法编写单元测试,并随之编写实现代码。

一:创建单元测试项目

右击解决方案资源管理器中的顶级条目,从弹出的菜单中选择“添加-新建项目”,在添加新项目对话框左侧选择“VisualC#--测试”,在中间面板选择“单元测试项目”,将项目名称设置为“EssentialTools.Tests”,点击确定,它将被添加到当前MVC应用程序项目的vs解决方案中,如下图所示。

对这一测试项目添加对“EssentialTools”的引用,以便能够针对项目中的类编写有关的单元测试。如下图所示。

二:创建单元测试

在EssentialTools.Tests项目的UnitTest1.cs文件中添加单元测试,如下图所示。

含有测试的类是用TestClass注解属性进行注释的,其中各个测试都是用TestMethod注解属性进行注释的方法。并不是一个单元类中的所有方法都是单元测试,例中的getTestObject方法没有设置TestMethod注解属性,vs不会把它当作一个单元测试。

单元测试方法遵循的“准备/动作/断言(A/A/A)”模式。上述测试方法是通过getTestObject建立起来的,getTestObject创建了一个待测试对象的实例,本例为MinimumDiscountHelper类,另外还定义了要检查的total值,这是单元测试的“准备(Arrange)”部分。

对于测试的动作部分,调用MinimumDiscountHelper.ApplyDiscount方法,并将结果赋给discountedTotal变量。最后,对于测试的“断言”部分使用了Assert.AreEqual方法,以检查从ApplyDiscount方法得到的值是最初额的90%。

Assert类有一系列可以在测试中使用的静态方法,每个静态方法都可以检查单元测试的某个方面。如果断言失败,将抛出一个异常,这意味着整个单元测试失败。由于每个单元测试都是独立进行处理的,因此其他单元测试将被继续执行。

下面对测试项目增加以下测试,以验证前述MinimumDiscountHelper的其他行为,如下图所示。

三:运行单元测试(并失败)

在vs菜单中选择“测试—运行—所有测试”,会看到如下图所示的界面,所有测试都失败了,这是因为所测试的这些方法还未实现。

四:实现特性

根据之前需求实现MinimumDiscountHelper类,如下图所示。

五:测试并修改代码

上述代码故意留有一个错误,运行所有测试,将会看到如下效果。

三个单元测试得到了通过,但Discount_Between_10_And_100测试方法检测到了一个问题,点击这一失败测试,可以看到错误提示“Assert.AreEqual 失败。应为: <5>,实际为: <10>。10 discount is wrong”。

将条件语句else if (totalParam > 10 && totalParam <= 100)修改为else if (totalParam >= 10 && totalParam <= 100)。

此时,运行全部测试,将会得到如下界面。



博主声明

1、本博客主要为原创文章,转载请注明出处。

2、部分文章来自网络,已注明出处,如有侵权请与本人联系。

3、如果文章内容有误,或者您有其他更好的意见、建议请给我留言,我会及时处理!