ASP.NetCore单元测试
单元测试:,
1、测试业务而不是基础结构
2、遵守微软约定
3、测试驱动的开发TDD (《C#测试驱动开发》)。.NET Core 中的单元测试: 。
.NetCore中的单元测试
1、支持C#,F#,VB.NET;
2、测试框架: xUnit,Nunit,MsTest
3、命令行驱动,或者VS IDE驱动
为什么要单元测试:
1、追求速度性能·
2、独立,可以单独运行,不依赖于数据库。 Mock
3.可重复
4.可自动化
单元测试中的术语:
Dummy,Fake,Stub,Spy和Mock
测试哑元(Dummy) - 只是帮助测试项目编译通过,不在具体测试里面起任何作用。
测试桩(Stub) - 只是能返回帮助测试的值
测试间谍(Spy) - 目的是测试被测单元接收到的值,也能返回值。Test Spy里肯定是要增加取参数的函数,用于测试
仿冒对象(Fake): 用能更简单的实现,部分实行测试替代。
仿制对象(Mock object) - 主要目的是测试函数调用,调用顺序。同时具备Stub, Spy功能。Mock不是仿真器,但是一个Mock Case的确可以仿真在某一个特定场景下被测模块与其他模块的交互。
怎么写一个单元测试?
1、准备数据,准备参数
2、调用行为(函数,方法)。
3、断言,断定调用行为之后返回的结果是否为
下面开始创建:
第一步创建类库,添加一个类PrimeService,
一.使用xUnit测试项目:
单元测试下面命名为ClassLibrary.XUNitTests,添加类PrimeServiceTest,示例代码如下:
using System; using System.Collections.Generic; using System.Text ; namespace ClassLibrary. XUnitTests { public class PrimeServiceTest { private readonly PrimeService _primeService; public PrimeServiceTest() { _primeService = new PrimeService(); } //此处写测试方法 [Fact] public void IsPrime_CanThrowNotImplementedException_WhenValueNot1(){ //数据 int thisValue = 2; //断言 抛出异常 Assert.Throws<NotImplementedException>(()=>_primeSerxise.IsPrime(thisvalue)); } } }
二.MsTest
MsTest创建之后会有示例模板
方拾二.MsTest测试多个值
using System; using System.Collections.Generic; using System.Text ; namespace ClassLibrary. MSTest { [TestClass] public class PrimeServiceTest { private readonly PrimeService _primeService; public PrimeServiceTest() { _primeService = new PrimeService(); } //单个数据测试 [TestMethod] public void IsPrime_ReturnFalse_WhenValueOf1(int value) { //数据 int thisValue = value; //行为 var result = _primeService.IsPrime(thisValue) ; //断言 Assert.IsFalse(result); } //随机模拟大批数据测试,跟Xunit一样,如果发生测试不通过,后面代码不再继续 [DataTestMethod] [DataRow(-1)] [DataRow(0)] [DataRow(1)] public void IsPrime_ReturnFalse_WhenValueOf1(int value) { //数据 int thisValue = value; //行为 var result = _primeService.IsPrime(thisValue) ;//断言 Assert.IsFalse(result) ; } } }
三.VS里面的自带工具:Live Unit Testing
运行不通过会出现以下提示:
四.第三方测试工具