添加:说明文档,对执行无异常断言和方法被执行情况断言
parent
74fe84d3f8
commit
00c5f51ea2
@ -0,0 +1,77 @@
|
||||
说明
|
||||
============
|
||||
## 断言:不发生异常
|
||||
|
||||
高版本取消了 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; }
|
||||
|
||||
/// <summary>
|
||||
/// 必须是虚方法或接口
|
||||
/// </summary>
|
||||
public virtual void DoSomething()
|
||||
{
|
||||
Console.WriteLine("我是方法");
|
||||
}
|
||||
}
|
||||
|
||||
using Moq;
|
||||
namespace WatchStudy.CancellationTokenStudy
|
||||
{
|
||||
public class UnitTest1
|
||||
{
|
||||
//测试方法
|
||||
[Fact]
|
||||
public void Test1()
|
||||
{
|
||||
//模拟方法
|
||||
var mock = new Mock<Person>();
|
||||
mock.Setup(foo => foo.DoSomething());
|
||||
|
||||
//调用方法一次
|
||||
mock.Object.DoSomething();
|
||||
|
||||
//断言 DoSomething 方法执行一次
|
||||
mock.Verify(foo => foo.DoSomething(), Times.Once());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
```
|
Loading…
Reference in New Issue