Как утверждать, что исключение было брошено - PullRequest
0 голосов
/ 12 апреля 2019

Я использую MOQ для настройки метода броска InvalidOperationException. Затем я использую MSTest Assert.ThrowsException, чтобы утверждать, что метод генерирует указанное исключение. Когда я отлаживаю тест, он выдает исключение, вместо того, чтобы утверждать, что ожидаемое исключение было выдано.

Я искал это и не нашел примеров, относящихся к моей проблеме. Я добавил атрибут к методу [ExpectedException(typeof(InvalidOperationException))], но получаю те же результаты. Я пытался переместить код, который выбрасывает исключение за пределы Assert, в его собственную строку кода, но я получаю те же результаты. Я не пытался обернуть код в собственный метод, который вызывается из тестового метода, потому что я не понимаю, как передать макет объекта в новый метод в качестве параметра (какой тип я бы использовал? Компилятор не как Moq или MOQ).

[TestClass]
public class UnitTest1
{
    [ExpectedException(typeof(InvalidOperationException))]
    [TestMethod]
    public void TestMethod1()
    {
        var mock = new Mock<IFoo>();

        // throwing when invoked with specific parameters
        mock.Setup(foo => 
             foo.DoSomething("reset")).Throws<InvalidOperationException>();
        //mock.Object.DoSomething("reset");
        Assert.ThrowsException<InvalidOperationException>(() => 
             mock.Object.DoSomething("reset"));
    }
}

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 12 апреля 2019

Спасибо Кеннету К за то, что он помог мне увидеть мою ошибку. Исходя из того, что я вижу, я считаю, что невозможно выполнить отладку с помощью модульного теста, когда вы намерены утверждать, что было сгенерировано исключение. Но вы можете запустить тест и утверждать, что было сгенерировано исключение. Чтобы правильно настроить тест для утверждения исключения с помощью MSTest, используйте атрибут ExpectedExceptions. Хотя я предполагаю, что вместо этого можно использовать Assert.ThrowsException в случае этого модульного теста, я не смог заставить этот подход работать.

...