说明 ============ ## 断言:不发生异常 高版本取消了 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()); } } } ```