FakeItEasy — захватить исключение для утверждения сообщения

У меня есть следующий тест:

    [Test]
    public void Save_WhenExceptionIsThrown_ThenExceptionIsLogged()
    {
        A.CallTo(() => this.personRepository.Save(A<PrsPerson>._)).Throws(new Exception("Expected Exception"));

        var personen = this.GetPersonenCollectionWithSpecificAmount(2);

        this.testee.Save(personen);

        A.CallTo(() => this.applicationLogger.Error(A<string>._)).MustHaveHappened(Repeated.Exactly.Once);
    }

Это работает как шарм, но я хочу дополнительно утверждать, был ли логгер вызван именно с сообщением о выброшенном исключении, а не просто с любой строкой.

Можно ли перехватить выброшенное исключение и если да, то как?

заранее спасибо


person xeraphim    schedule 10.03.2016    source источник


Ответы (2)


Укажите желаемое значение аргумента явно внутри лямбда-вызова метода.

Попробуйте подписаться

 A.CallTo(() => this.applicationLogger.Error("Expected Exception"))
 .MustHaveHappened(Repeated.Exactly.Once);
person tchelidze    schedule 10.03.2016
comment
эй спасибо за ответ. Я не хочу жестко кодировать строку. я хочу иметь возможность установить утверждение на: A.CallTo(() => this.applicationLogger.Error(ex.Message)).MustHaveHappened(Repeated.Exactly.Once);, где exc - это выброшенное исключение - person xeraphim; 10.03.2016
comment
Тогда я думаю, что ваш лучший подход - это var ex = new Exception("Expected Exception"); A.CallTo(() => this.personRepository.Save(A<PrsPerson>._)).Throws(ex); /* … */ A.CallTo(() => this.applicationLogger.Error(ex.Message)).MustHaveHappened(Repeated.Exactly.Once); Захват строки возможен, но больше работы, и я думаю, что это сработает и будет лучше читаться. - person Blair Conrad; 10.03.2016

Регистратор введен? Вы можете издеваться над этим.

class ListLogger : List<string>, ILogger
{
    public void LogException(Exception ex)
    {
        Add(ex.ToString());
    }
}

Затем после того, как тест «действует», вы можете увидеть, есть ли ожидаемое исключение в списке.

person Scott Hannen    schedule 10.03.2016