1

I'm testing this factory

    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)
        {
        }
    }

and here is my test class

    [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();
        }
    }

When I run my tests, the thes does not run, or return a "Inconclusive" result.

How can I test Async calls using NSubstitute and FluentAssertions?

UPDATE 19/05/16

I fixed the test methods to return Task instead of void and the tests throws NullReferenceExceptions

Jedi31
  • 735
  • 1
  • 6
  • 22

1 Answers1

2

I just copy/pasted your code and added a couple of empty interfaces and classes for the missing types. The tests ran just fine out of the box.

As for your question, "How can I test Async calls using NSubstitute and FluentAssertions?", here is how to check for exceptions from an async method.

Func<Task> action = async () => await _contratoFactory.Build(contrato);
action.ShouldThrow<SomeValidationFailedException>();
Jørn Jensen
  • 998
  • 1
  • 10
  • 17