NUnit NSubstitute не ожидает исключения

Я новичок в модульном тестировании и NUnit, мой случай заключается в том, что тест, ожидающий простого исключения, перестал работать, когда я перешел с Ninject NSubstitute, имитирующего адаптер ядра, на простой NSubstitute для имитации Returns целей.

    private IRecordRepository RecordRepositorySeed()
    {
        var repository = Substitute.For<IRecordRepository>();

        record.GetSingleAsync(r => r.Id == "1").Returns(new Task<Record>(() => new Record(...))); // sample record

        return repository;
    }

    [Test]
    [ExpectedException(typeof(NullReferenceException))]
    public void UnexistantRecord()
    {
        var billingService = new BillingService(RecordRepositorySeed());
        billingService.GenerateBill("5", "test");
    }

Тест не проходит, так как он выводит, что тест ожидает System.NullReferenceException.

Я отладил проверенный метод, и он фактически запускает его:

//After a query on record that returns null, this snippet goes on
if (record == null)
{
    //It's reaching this part
    throw new NullReferenceException("record not found");
}

Я пробовал эти решения, но ни одно из них не помогло мне:

Ожидаемые исключения NUnit

Модульный тест NUnit имеет ExpectedException, но по-прежнему терпит неудачу при исключении

Дело в том, что этот тест работал до того, как я изменил синтаксис макета на Substitute, и я не могу понять, что не так с этим подходом.

Я не уверен, что это актуально, но метод GenerateBill async void


person Miguel A. Arilla    schedule 21.09.2015    source источник
comment
Итак, тест не проходит, потому что NUnit ожидает исключение, но оно не генерируется? Это пройдет, если убрать строку record.GetSingleAsync(...).Returns(...)?   -  person David Tchepak    schedule 22.09.2015
comment
@DavidTchepak Нет, так тоже не работает, код на самом деле выдает исключение, но тест не может его распознать   -  person Miguel A. Arilla    schedule 22.09.2015
comment
Если GenerateBill равно async void, возможно, вызов не завершился, когда тест закончился? Я не уверен, как изменение фиктивного адаптера повлияет на это поведение, но, возможно, на это стоит обратить внимание.   -  person David Tchepak    schedule 23.09.2015
comment
@DavidTchepak Вы были правы, я сделал тест асинхронным с вызовом await для GenerateBills и работает как шарм;)   -  person Miguel A. Arilla    schedule 23.09.2015