xUnitStudy/xUnitStudy.WebApi.Test/UseXUnitAssertTest.cs

288 lines
9.6 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;
using xUnitStudy.Model;
namespace xUnitStudy.WebApi.Test
{
[Trait("测试断言分组", "默认组")]
public class UseXUnitAssertTest : IDisposable
{
public UseXUnitAssertTest()
{
}
[Fact]
public void Equal_String_Test()
{
Assert.Equal("ping", "ping");
}
[Fact]
public void NotEqual_String_Test()
{
Assert.NotEqual("ping", "ack");
}
/// <summary>
/// 断言 string 相等
/// 设置大小写、行尾符、空白符号 比较选项
/// </summary>
[Fact]
public void Equal_String_Ignore_Test()
{
//ignoreCase:忽略字符大小写差异.如果为true,比较时忽略字符大小写
Assert.Equal("ABcdEF", "abcdef", ignoreCase: true);
//ignoreLineEndingDifferences忽略行尾结束符差异。设置为true则将\rn、\r和\n视为等效。
Assert.Equal("One line\r\n", "one line\n", ignoreCase: true, ignoreLineEndingDifferences: true);
//ignoreWhiteSpaceDifferences忽略"空白"(空格、Tab)差异。设置为true则将空格和制表符以任何非零量视为等效。
Assert.Equal("One line\r", "one line\n", ignoreCase: true, ignoreLineEndingDifferences: true, ignoreWhiteSpaceDifferences: true);
}
[Fact]
public void Equal_Double_Test()
{
//注意:先舍入,然后再比较
//舍入规则:四舍五入
//精度范围[0,15]位小数
Assert.Equal(1.14d, 1.11d, precision: 1);
Assert.Equal(1.15d, 1.19d, precision: 1);
Assert //1.14d 约等于1.1 而1.15d 约等于1.2 所以不相等
.NotEqual(1.14d, 1.15d, precision: 1);
//四舍五入到2位小数精度相等
Assert.Equal(2.123d, 2.124d, 2);
//四舍五入到3位小数精度相等
Assert.Equal(3.1234d, 3.1231d, 3);
//四舍五入到4位小数精度不等
Assert.NotEqual(3.12345d, 3.12349d, 4);
//四舍五入到整数,相等
Assert.Equal(15d, 15.111d, precision: 0);
//没有小数位,四舍五入到整数
Assert.Equal(15d, 15d, precision: 0);
}
[Fact]
public void NotEqual_Double_Test()
{
//注意:先舍入,然后再比较
//舍入规则:四舍五入
//精度范围[0,15]位小数
Assert //1.14d 约等于1.1 而1.15d 约等于1.2 所以不相等
.NotEqual(1.14d, 1.15d, precision: 1);
//舍入到2位小数精度相等
Assert.NotEqual(2.124d, 2.126d, 2);
//舍入到3位小数精度相等
Assert.NotEqual(3.1234d, 3.1239d, 3);
//舍入到4位小数精度不等
Assert.NotEqual(3.12346d, 3.12341d, 4);
//舍入到整数,相等
Assert.NotEqual(16d, 15.111d, precision: 0);
//没有小数位,舍入到整数
Assert.NotEqual(16d, 160d, precision: 0);
}
[Fact]
public void Equal_Decimal_Test()
{
//注意:先舍入,然后再比较
//舍入规则:四舍五入
//精度范围[0,15]位小数
Assert.Equal(1.14M, 1.11M, precision: 1);
Assert.Equal(1.15M, 1.19M, precision: 1);
Assert //1.14M 约等于1.1 而1.15M 约等于1.2 所以不相等
.NotEqual(1.14M, 1.15M, precision: 1);
//四舍五入到2位小数精度相等
Assert.Equal(2.123M, 2.124M, 2);
//四舍五入到3位小数精度相等
Assert.Equal(3.1234M, 3.1231M, 3);
//四舍五入到4位小数精度不等
Assert.NotEqual(3.12345M, 3.12349M, 4);
//四舍五入到整数,相等
Assert.Equal(15M, 15.111M, precision: 0);
//没有小数位,四舍五入到整数
Assert.Equal(15M, 15M, precision: 0);
}
[Fact]
public void NotEqual_Decimal_Test()
{
//注意:先舍入,然后再比较
//舍入规则:四舍五入
//精度范围[0,15]位小数
Assert //1.14M 约等于1.1 而1.15M 约等于1.2 所以不相等
.NotEqual(1.14M, 1.15M, precision: 1);
//四舍五入到2位小数精度不等
Assert.NotEqual(2.123M, 2.129M, 2);
//四舍五入到3位小数精度不等
Assert.NotEqual(3.1234M, 3.1236M, 3);
//四舍五入到4位小数精度不等
Assert.NotEqual(3.12345M, 3.12349M, 4);
//四舍五入到整数,不等
Assert.NotEqual(15M, 15.501M, precision: 0);
//没有小数位,四舍五入到整数
Assert.NotEqual(29M, 15M, precision: 0);
}
[Fact]
public void Equal_Datetime_Test()
{
Assert.Equal(DateTime.Now, DateTime.Now.AddSeconds(1), TimeSpan.FromSeconds(2));
Assert.Equal(DateTime.Now, DateTime.Now.AddMinutes(1), TimeSpan.FromMinutes(2));
}
/// <summary>
/// Equal 泛型版本
/// 泛型版基本上都有简化写法
/// </summary>
[Fact]
public void Equal_GenericT_Test()
{
//形如Assert.Equal<T>(Expected T, Actual T);
//常见类型都可以简化,或是有更好的非泛型版,此时,一般用非泛型版
Assert.Equal<string>("ping", "ping");
Assert //基本使用非泛型版本
.Equal("ping", "ping");
Assert.Equal<int>(3, 3);
Assert //简化为
.Equal(3, 3);
Assert.Equal<long>(3, 3);
Assert //简化为
.Equal(3L, 3L);
Assert.Equal<double>(5.5d, 5.5d);
Assert //简化为
.Equal(5.5d, 5.5d);
Assert.Equal<decimal>(5.5M, 5.5M);
Assert //简化为
.Equal(5.5M, 5.5M);
Assert.Equal<DateTime>(DateTime.Now.Date, DateTime.Now.Date);
Assert //简化为
.Equal(DateTime.Now.Date, DateTime.Now.Date);
//类或其它自定义结构比较,可以使用
var obj = new object();
Assert.Equal<object>(obj, obj);
Assert //简化为
.Equal(obj, obj);
}
/// <summary>
/// Equal 实现了IEqualityComparer接口的泛型版本
/// </summary>
[Fact]
public void Equal_Generic_IEqualityComparer_Test()
{
//形如Assert.Equal<T>(Expected T, Actual T,IEqualityComparer comparer);
//实现 IEqualityComparer 接口
var expected = new AssertEqualDemo() { Id = 1, Name = "zhansan" };
var actual = new AssertEqualDemo() { Id = 1, Name = "lisi" };
//实现 IEqualityComparer 接口的,可以是被比较对象自己实现接口,也可以是单独的类。
var comparer = new AssertEqualDemo();
Assert.Equal<AssertEqualDemo>(expected, actual, comparer);
Assert.//可以简写为
Equal(expected, actual, comparer);
//id不一样则不相等
expected.Id = 3;
Assert.NotEqual(expected, actual, comparer);
}
/// <summary>
/// 实现IEnumerable接口对象的 Equal比较
/// </summary>
[Fact]
public void Equal_Generic_IEnumerable_Test()
{
//对实现IEnumerable接口的对象进行 Equal比较
//形如Equal<T>(IEnumerable<T> expected, IEnumerable<T> actual)
List<string> expected = new List<string>() {"first","second" };
List<string> actual = new List<string>() {"first","second" };
Assert.Equal<List<string>>(expected, actual);
Assert.//简写为
Equal(expected, actual);
}
/// <summary>
/// 实现IEnumerable接口对象的 Equal 比较
/// 传入实现IEqualityComparer接口的比较器
/// </summary>
[Fact]
public void Equal_Generic_IEnumerable_IEqualityComparer_Test()
{
//对实现IEnumerable接口的对象进行 Equal比较
//形如Equal<T>(IEnumerable<T> expected, IEnumerable<T> actualIEqualityComparer comparer)
//传入实现了 IEqualityComparer 接口的比较参数
var expected = new List<AssertEqualDemo>()
{
new AssertEqualDemo() { Id = 1, Name = "zhansan" },
new AssertEqualDemo() { Id = 2, Name = "lis" },
};
var actual = new List<AssertEqualDemo>()
{
new AssertEqualDemo() { Id = 1, Name = "wangwu" },
new AssertEqualDemo() { Id = 2, Name = "zhaoliu" },
};
//实现 IEqualityComparer 接口的,可以是被比较对象自己实现接口,也可以是单独的类。
var comparer = new AssertEqualDemo();
Assert.Equal<AssertEqualDemo>(expected, actual, comparer);
Assert.//可以简写为
Equal(expected, actual, comparer);
//id不一样则不相等
expected[0].Id = 100;
Assert.NotEqual(expected, actual, comparer);
}
public void Dispose()
{
}
}
}