添加:说明文档,对执行无异常断言和方法被执行情况断言

master
bicijinlian 2 years ago
parent 74fe84d3f8
commit 00c5f51ea2

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio Version 17
VisualStudioVersion = 15.0.27703.2042 VisualStudioVersion = 17.4.33205.214
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetFramework20", "DotNetFramework20\DotNetFramework20.csproj", "{E88F4843-6F11-497A-8D61-F28F1FF1109F}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetFramework20", "DotNetFramework20\DotNetFramework20.csproj", "{E88F4843-6F11-497A-8D61-F28F1FF1109F}"
EndProject EndProject
@ -37,6 +37,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "说明", "说明", "{E5C526
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
..\xUnit版本支持说明.png = ..\xUnit版本支持说明.png ..\xUnit版本支持说明.png = ..\xUnit版本支持说明.png
..\xUnit版本支持说明.xlsx = ..\xUnit版本支持说明.xlsx ..\xUnit版本支持说明.xlsx = ..\xUnit版本支持说明.xlsx
说明.md = 说明.md
EndProjectSection EndProjectSection
EndProject EndProject
Global Global

@ -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…
Cancel
Save