namespace OptionsPattern.Sutdy.Advanced
{
public class UseXunitTest:IDisposable
{
private readonly ITestOutputHelper? _output;
private readonly IConfiguration _defaultConfig;
public UseXunitTest(ITestOutputHelperAccessor outputHelperAccessor,IConfiguration configuration)
{
if (outputHelperAccessor == null)
{
throw new ArgumentNullException(nameof(outputHelperAccessor));
}
if (outputHelperAccessor == null)
{
throw new ArgumentNullException($"参数 {nameof(outputHelperAccessor)} 为 null, 请在 Startup.cs 中注册 IConfiguration");
}
_output = outputHelperAccessor.Output;
_defaultConfig = configuration;
}
///
/// xUnit 可用性测试
///
[Fact]
public void UsabilityTest()
{
Assert.True(true, "6.2 配置选项进阶,使用xUnit测试框架!");
_output?.WriteLine("6.2 配置选项 进阶!");
}
///
/// 从IoC中获取默认配置
/// 1、引入 Xunit.DependencyInjection 库
/// 2、Startup.cs 中设置默认配置
///
[Fact]
public void GetIConfiguration_FromDI_ByStartup_Test()
{
var appOption = _defaultConfig.Get();
Assert.NotNull(_defaultConfig);
Assert.NotNull(appOption);
Assert.Contains(nameof(AppOption.AppName), appOption.AppName);
}
///
/// 断言不发生异常
/// 使用:xUnit 变通方法
///
[Fact]
public void DoesNotThrow_Test()
{
//待执行代码段
Action codeSnippet = () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
var exception = Record.Exception(codeSnippet);
Assert.Null(exception);
_output?.WriteLine("使用 xUnit 变通方法,断言不发生异常!");
}
///
/// 断言不发生异常
/// 使用:FluentAssertions 库方式,断言不发生异常
///
[Fact]
public void DoesNotThrow_UseFluentAssertions_Test()
{
//待执行代码段
Action codeSnippet= () =>
{
//业务代码
//模拟异常
//throw new Exception("我是特意抛出的异常!");
};
//断言:不发生异常
codeSnippet.Should().NotThrow();
_output?.WriteLine("使用 FluentAssertions 库方式,断言不发生异常!");
}
///
/// 清理
///
public void Dispose()
{
}
}
}