You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.7 KiB

说明

断言:不发生异常

高版本取消了 Assert.NotThrow() 断言,使得断言 "代码断不发生异常" 比较困难。 解决方法:

  • 使用 xUnit 自带 Record 变通实现
    //待执行代码段
    Action codeSnippet = () =>
    {
        //业务代码
    
        //模拟异常
        //throw new Exception("我是特意抛出的异常!");
    };
    
    var exception = Record.Exception(codeSnippet);
    Assert.Null(exception);
    
  • 使用 FluentAssertions 库
    //待执行代码段
    Action codeSnippet= () =>
    {
        //业务代码
    
        //模拟异常
        //throw new Exception("我是特意抛出的异常!");
    };
    
    //断言:不发生异常
    codeSnippet.Should().NotThrow();
    

断言:方法的执行情况(执行过一次等)

目前没法有找到针对方法执行情况的断言(比如 执行过 只执行一次 最少执行一次),但有一些变通方法

  • 使用 Moq 库,但是只能针对"模拟对象",并且只针对虚方法或接口方法
    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());
            }
        }
    }