使用 FluentAssertions 和 NSubstitute 的异步单元测试是不确定的
Posted
技术标签:
【中文标题】使用 FluentAssertions 和 NSubstitute 的异步单元测试是不确定的【英文标题】:Unit Test with Async is Inconclusive with FluentAssertions and NSubstitute 【发布时间】:2016-09-15 11:59:22 【问题描述】:我正在测试这个工厂
public class ContratoFactory : IContratoFactory
private readonly IContratoPodeSerCriadoValidation _contratoPodeSerCriadoValidation;
public ContratoFactory(IContratoPodeSerCriadoValidation contratoPodeSerCriadoValidation)
_contratoPodeSerCriadoValidation = contratoPodeSerCriadoValidation;
public async Task<IValidationResult> Build(Contrato entity)
try
var result = _contratoPodeSerCriadoValidation.Valid(entity);
catch (Exception ex)
// throw
public async Task AdicionarLocalBase(Contrato entity)
这是我的测试课
[TestClass]
public class ContratoFactoryTests
private IContratoPodeSerCriadoValidation _contratoPodeSerCriadoValidation;
private ContratoFactory _contratoFactory;
[TestInitialize]
public void Initialize()
_contratoPodeSerCriadoValidation = Substitute.For<IContratoPodeSerCriadoValidation>();
_contratoFactory = new ContratoFactory(_contratoPodeSerCriadoValidation);
[TestMethod]
public async Task AoSerCriadoOContratoDeveSerValidado()
var contrato = ContratoValues.ContratoComEmpresaENomeValido;
await _contratoFactory.Build(contrato);
_contratoPodeSerCriadoValidation.Valid(contrato).Received();
当我运行测试时,thes 没有运行,或者返回“不确定”结果。
如何使用 NSubstitute 和 FluentAssertions 测试异步调用?
2016 年 5 月 19 日更新
我修复了测试方法以返回 Task 而不是 void 并且测试抛出 NullReferenceExceptions
【问题讨论】:
首先要修复 - 更改您的测试方法以返回Task
,而不是 void
。这可能不是您需要做的全部,但您当然应该这样做。
谢谢 =] id 工作。它使我的异步测试运行。现在,我遇到了 NullReferenceObject 异常。
您应该使用更新的信息更新您的问题或删除您的问题
我没有看到 Fluent Assertions 的任何用法。
【参考方案1】:
我只是复制/粘贴了您的代码,并为缺少的类型添加了几个空接口和类。开箱即用的测试运行良好。
至于您的问题“如何使用 NSubstitute 和 FluentAssertions 测试异步调用?”,这里是如何检查异步方法中的异常。
Func<Task> action = async () => await _contratoFactory.Build(contrato);
action.ShouldThrow<SomeValidationFailedException>();
【讨论】:
以上是关于使用 FluentAssertions 和 NSubstitute 的异步单元测试是不确定的的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fluentassertions 和 Nunit 在单元测试中进行计数验证
FluentAssertions Throw() 未列出使用
如何在 FluentAssertions 中使用 Excluding 来排除 Dictionary 中的特定 KeyValue 对
使用 FluentAssertions API 4.x 语法迁移 xunit 项目以使用 FluentAssertions v5.x 版本运行