侧边栏壁纸
博主头像
Komi博主等级

WizMan Komi

  • 累计撰写 30 篇文章
  • 累计创建 43 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

C# 单元测试框架xUnit使用参照

Komi
2022-03-01 / 0 评论 / 0 点赞 / 164 阅读 / 1,641 字
温馨提示:
内容仅供参考,实际使用需根据自身条件进行调整与删改

最近自己在写casdoor的开源项目的时候发现自己写的一个方法貌似自己看着有些不是很对劲 但也说不出来哪里有些问题 所以干脆在项目同级目录下创建了一个测试模块来进行对项目组件单元性的测试

xUnit是?

xUnit.Net是一个开源的,由NUnit v2版本的作者编写的专门为 .Net Framework平台设计的测试框架。https://xunit.net/ 这个是它的官网。

测试脚手架搭建过程

主要步骤为:

  1. 在现有的项目解决方案基础上新增测试框架项目
  2. 新增测试类 并将测试项目关联原项目
  3. 编写测试用例代码
  4. 运行测试用例

屏幕截图 2022-03-01 182239.png

这里选择新建项目

屏幕截图 2022-03-01 182410.png

框架选择xUnit测试项目类型
// 基本用法
public class UnitTestInstance01{
  [Fact]
  public void testUnit01()
  {
      Assert.True("sans davin 8",string.Format("{0} {1} {2}","sans","davin","8"))
      // return true;
  }
}

如果希望自己的测试用例能够使用被其他参数接入测试的话 需要使用Theory属性搭配InlineData属性来定义测试方法

public class UnitTestInstance02{
    [Theory]
    [InlineData(2,5,7)]
    [InlineData(2,3,7)]
    [InlineData(1,5,6)]
    public void testUnit02(int val1,int val2,int val3)
    {
	Assert.Equal(val1+val2,val3);
    }
}

注意:这里Theory属性是继承自Fact属性的 它可以基于普通的测试上加上自定义参数支持的

屏幕截图 2022-03-01 185045.png

当我们需要使用自定义的参数时 可以使用MemberData加上nameof后接入方法名称来使用

public static IEnumerable<object[]> testMockData01()
{
    return new List<object[]>
  {
    new object[]
    {
	new List<KeyValuePair<string,object>>
	  {
	      new KeyValuePair<string,object>("name","sans"),
	      new KeyValuePair<string, object>("owner", "komi"),
	      new KeyValuePair<string, object>("Location", null!)
	  },
    }
  };
}

[Theory]
[MemberData(nameof(testMockData01))]
public void testUnit03(List<KeyValuePair<string, object>> types)
{
    try
    {
        // 这里是为了校验JsonSerializer是否反序列化成功
	Assert.True(CastUtil.classify(types, new CasdoorUser()) is CasdoorUser);
	}
	    catch (Exception)
	{
	    throw;
	}
}

注意: MemberData属性第一个参数是Mock方法的字面量后面的参数组为 第一个参数也就是我们Mock方法需要传入的各个参数

屏幕截图 2022-03-01 192855.png

运行测试用例

点击topBar上的视图 -> 选中测试资源管理器

屏幕截图 2022-03-01 192537.png

这里可以看到当前测试项目的所有测试单元 可以进行独立单元测试也可以执行整体集成测试

推荐文章: ->

https://hamidmosalla.com/2017/02/25/xunit-theory-working-with-inlinedata-memberdata-classdata/

0

评论区