Я новичок в модульном тестировании и 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 имеет ExpectedException, но по-прежнему терпит неудачу при исключении а>
Дело в том, что этот тест работал до того, как я изменил синтаксис макета на Substitute
, и я не могу понять, что не так с этим подходом.
Я не уверен, что это актуально, но метод GenerateBill
async void
record.GetSingleAsync(...).Returns(...)
? - person David Tchepak   schedule 22.09.2015GenerateBill
равноasync void
, возможно, вызов не завершился, когда тест закончился? Я не уверен, как изменение фиктивного адаптера повлияет на это поведение, но, возможно, на это стоит обратить внимание. - person David Tchepak   schedule 23.09.2015