繁体   English   中英

异步的单元测试与FluentAssertions和NSubstitute无关

[英]Unit Test with Async is Inconclusive with FluentAssertions and NSubstitute

我正在测试这家工厂

    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测试异步调用?

更新16/05/19

我修复了测试方法以返回Task而不是void的情况,并且测试抛出NullReferenceExceptions

我只是复制/粘贴了您的代码,并为缺少的类型添加了两个空接口和类。 开箱即用,测试就很好。

关于您的问题,“如何使用NSubstitute和FluentAssertions测试异步调用?”,这是如何检查异步方法中的异常的方法。

Func<Task> action = async () => await _contratoFactory.Build(contrato);
action.ShouldThrow<SomeValidationFailedException>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM