我是靠谱客的博主 风中小虾米,最近开发中收集的这篇文章主要介绍webAPI xUnit单元测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通常我们在编码完成功能后,都需要进行单元测试,编写单元测试的好处在于有助于代码维护。

一、测试框架MSTest与xUnit比较

特性比较
MSTestxUnit备注
[TestClass]标记为测试类
[TestMethod][Fact]标记为测试方法
[ExpectedException]Assert.Throws期望抛出异常
[TestInitialize]Constructor在每个测试方法执行之前用于初始化的方法
[TestCleanup]IDisposable.Dispose在每个测试方法执行之前用于结束的方法
[ClassInitialize]IUseFixture<T>在所有测试方法执行之前用于初始化的方法
[Ignore][Fact(Skip="reason")]跳过测试设置
[Timeout][Fact(Timeout=n)]用于指定被测试方法的最大执行时间(单位毫秒),若超过指定的标记时间,则被认为测试失败
[TestProperty][Trait]设置任意的测试数据
[DataSource][Theory], [XxxData]理论上的数据驱动测试
断言比较
MSTestxUnit备注
AreEqualEqual相等比较
AreNotEqualNotEqual不相等比较
AreNotSameNotSame不相同比较
AreSameSame相同比较
Contains (on CollectionAssert)Contains包含比较

DoesNotContain (on CollectionAssert)

DoesNotContain不包含比较

DoesNotThrow

不抛出异常
Fail失败
Inconclusive 
InRange在范围内
IsAssignableFrom 
Empty 
IsFalseFalse 
IsInstanceOfTypeIsType 
IsNotInstanceOfTypeIsNotType 

IsNotNull

NotNull 
IsNullNull 
IsTrueTrue 
NotInRange不在范围内
Throws抛出异常

二、webAPI 创建xUnit单元测试

1、使用VSCode创建webAPI项目(命令 dotnet new webapi)

2、使用VSCode创建xunit项目(命令 dotnet new xunit)

3、xunit 项目添加对webAPI项目的引用

4、单元测试代码示例

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using UnitTestCommonLib;
using UnitTestWebAPI.Controllers;
using Xunit;
namespace WebAPIUnitTest
{
[Collection("Sequential")]
public class ClerkUnitTest
{
CommonHelper commonHelper = new CommonHelper();
ClerkEntities clerkEntities = new ClerkEntities();
/// <summary>
/// test GetClerkList
/// </summary>
[Fact]
public void GetClerkList()
{
//create test data for CSB004
var clerkList = new List<CSB004>
{
new CSB004 { Ucode = "000000000001", ClkCode = "0000000001", ClkName = "clkname1", ClkGrpCode = "000001", DrawerNumber = "1", ClkIntCode = "000001", NbchkNumFrom = "000001", NbchkNumTo = "000009", Unusable = "0", CreateDateTime = DateTime.UtcNow.ToString ("yyyyMMddHHmmss"), UpdateDateTime = "" },
new CSB004 { Ucode = "000000000001", ClkCode = "0000000002", ClkName = "clkname2", ClkGrpCode = "000001", DrawerNumber = "1", ClkIntCode = "000001", NbchkNumFrom = "000001", NbchkNumTo = "000009", Unusable = "0", CreateDateTime = DateTime.UtcNow.ToString ("yyyyMMddHHmmss"), UpdateDateTime = "" },
new CSB004 { Ucode = "000000000002", ClkCode = "0000000002", ClkName = "clkname2", ClkGrpCode = "000001", DrawerNumber = "1", ClkIntCode = "000001", NbchkNumFrom = "000001", NbchkNumTo = "000009", Unusable = "0", CreateDateTime = DateTime.UtcNow.ToString ("yyyyMMddHHmmss"), UpdateDateTime = "" }
};
clerkEntities.csb004.AddRange(clerkList);
clerkEntities.SaveChanges();
//create test examples
var testcol = new GetClerkListController();
GetClerkListController.InputModel input = new GetClerkListController.InputModel();
// data exist
input.Ucode = "000000000001";
var actualValue = testcol.GetClerkList(input);
var actualModel = JsonHelper.JsonToEntity<CommonHelper.ReturnInfo>(actualValue);
//No data exist -No data in CSB004
input.Ucode = "000000000003";
var actualValue1 = testcol.GetClerkList(input);
// when ucode is empty
input.Ucode = "";
var actualValue2 = testcol.GetClerkList(input);
var actualModel2 = JsonHelper.JsonToEntity<CommonHelper.ReturnInfo>(actualValue2);
//clear test data
clerkEntities.csb004.RemoveRange(clerkList);
clerkEntities.SaveChanges();
//verify
Assert.NotNull(actualValue);
Assert.Equal(CommonHelper.ERROR_CORRECT, actualModel.errorcode);
Assert.Equal(commonHelper.ReturnCodeMessage(CommonHelper.ERROR_NORECORD), actualValue1);
Assert.Equal(CommonHelper.ERROR_REQUIRED, actualModel2.errorcode);
Assert.Equal("Ucode", actualModel2.maininfo);
}
}

5、注:测试类中的[Collection("Sequential")]标注,防止同一个单元测试项目中,不同测试类中的不同测试方法在测试运行时,出现数据冲突,造成测试失败

最后

以上就是风中小虾米为你收集整理的webAPI xUnit单元测试的全部内容,希望文章能够帮你解决webAPI xUnit单元测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部