说明
============
## 断言:不发生异常
高版本取消了 Assert.NotThrow() 断言,使得断言 "代码断不发生异常" 比较困难。
解决方法:
+ 使用 xUnit 自带 Record 变通实现
```csharp
//待执行代码段
Action codeSnippet = () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
var exception = Record.Exception(codeSnippet);
Assert.Null(exception);
```
+ 使用 FluentAssertions 库
```csharp
//待执行代码段
Action codeSnippet= () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
//断言:不发生异常
codeSnippet.Should().NotThrow();
```
## 断言:方法的执行情况(执行过一次等)
目前没法有找到针对方法执行情况的断言(比如 执行过 只执行一次 最少执行一次),但有一些变通方法
+ 使用 Moq 库,但是只能针对"模拟对象",并且只针对虚方法或接口方法
```csharp
public class Person
{
public string Name { get; set; }
public int Id { get; set; }
///
/// 必须是虚方法或接口
///
public virtual void DoSomething()
{
Console.WriteLine("我是方法");
}
}
using Moq;
namespace WatchStudy.CancellationTokenStudy
{
public class UnitTest1
{
//测试方法
[Fact]
public void Test1()
{
//模拟方法
var mock = new Mock();
mock.Setup(foo => foo.DoSomething());
//调用方法一次
mock.Object.DoSomething();
//断言 DoSomething 方法执行一次
mock.Verify(foo => foo.DoSomething(), Times.Once());
}
}
}
```