NUnit: выполнение кода при ловушке сбоя подтверждения - PullRequest
2 голосов
/ 23 июня 2010

Есть ли в NUnit ловушка для выполнения кода только в случае сбоя подтверждения без перехвата самого исключения.По сути, он должен принять делегат действия, который будет выполнен, когда утверждение не выполнено, а затем повторно выдать исключение.Зачем мне это нужно?Мне нужно сравнить два объекта и вывести результат на экран, чтобы упростить отладку при сбое утверждения.

Нечто подобное работает, но это плохой взлом. Проблема в том, что он охотно оценивает ProcessCompareError, поэтому у меня возникают ненужные накладные расходы, плюс он делает это независимо от того, есть ошибка или нет.Итак, есть ли перегрузка, которая примет делегат, который будет выполнен, когда утверждение не выполнено?

Assert.That(benefitLimitComparer.Compare(copyBenefitLimit, origBenefitLimit), Is.EqualTo(0),limitError, ProcessCompareError(origBenefitLimit, copyBenefitLimit));
                }
            }
        }

        private string ProcessCompareError(BenefitLimit origBenefitLimit, BenefitLimit copyBenefitLimit)
        {        
            Console.WriteLine("Original: ");
            ObjectDumper.Write(origBenefitLimit);
            Console.WriteLine("Copy");
            ObjectDumper.Write(copyBenefitLimit);

            return "";
        }

Ответы [ 2 ]

0 голосов
/ 21 июля 2016

Существует возможность обернуть утверждение как Действие в try-catch . В catch вы можете выполнить дополнительное сравнение:

    public static void ExecuteAssert(Action assert)
    {
        if (assert == null) return;
        try
        {
            assert();
        }
        catch (Exception ex)
        {
            // perform the compare
        }
    }

В качестве замечания: я использую аналогичный метод, чтобы продолжить выполнение теста и избежать остановки всего теста, если некоторые нефатальные проверки не пройдены. На самом деле я выполняю ряд действий:

private static void VerifyAll(params Action[] asserts)

0 голосов
/ 28 июля 2010

Я не уверен, как это можно сделать через делегата. Один из вариантов - сохранить результат сравнения. Если результат ложен, запишите содержимое объектов и затем вызовите Assert.Fail ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...