添加:说明文档,对执行无异常断言和方法被执行情况断言
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