2016-05-18 60 views
1

我测试这个工厂与异步单元测试是不确定的有FluentAssertions和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测试异步调用?

UPDATE 19/05/16

我固定的测试方法返回,而不是空洞的任务和测试抛出NullReferenceException异常

+2

首先要解决的问题 - 改变你的测试方法返回Task,而不是void。这可能不是你需要做的所有事情,但你当然应该这样做。 –

+0

谢谢=] id有效。它使我的异步测试运行。现在,我有一个NullReferenceObject异常。 – Jedi31

+0

您应该使用更新的信息更新您的问题或删除您的问题 –

回答

2

我只是复制/粘贴代码,并增加了几个空的接口和类为缺少的类型。测试在箱子外运行得很好。

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

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