как я (юнит) тестирую свою обработку исключений во время выполнения? - PullRequest
1 голос
/ 27 июня 2011

У меня есть небольшое веб-приложение, которое выполняет некоторые простые операции ввода-вывода данных через графический интерфейс пользователя.

, поэтому, когда пользователь нажимает «сохранить», данные сохраняются. В случае исключения во время выполнения я перехватываю это исключение, регистрирую его и показываю «извините и т. Д.» этикетка.

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

Есть ли хорошее решение для этого?

единственный способ, о котором я мог подумать, - это создать заглушку, которая генерирует исключение, и через ioc загрузить эту заглушку, когда я хочу проверить сценарий «сбой». это создает некоторую дополнительную работу и не помогает мне, когда я сначала хочу проверить сбой шага 1, а затем успех шага 1 и провал шага 2.

Теперь я делаю это вручную, вставляя (и удаляя) некоторые команды исключения исключений, но это, конечно, не очень надежно.

Ответы [ 3 ]

3 голосов
/ 27 июня 2011

что вам нужно сделать, это максимально отделить логику, которую вы выполняете, от внешнего интерфейса.Затем вы можете написать тест, который проверяет, что логика выполняется правильно, независимо от пользовательского интерфейса.

Вы можете начать с написания класса, который принимает объект, представляющий сохраняемые данные, и интерфейс, представляющий зависимость, которая будетсделайте сохранение (и возможно интерфейс, который представляет зависимость регистрации).Затем вы можете написать тесты, которые проходят фиктивную зависимость, настроенную на выдачу исключений в правильных точках, и недействительные данные, которые вы можете проверить на валидацию.Вы также можете проверить, что регистрация была выполнена, как вы ожидали.Этот класс может возвращать объект, который представляет успех или нет функции, и вы можете показать сообщение или нет на основе этого возвращенного объекта.Если вы используете MVC, то вы можете проверить правильность представления в случае ошибки, а если нет, то вы немного застряли с логикой пользовательского интерфейса в тестировании, и ваша единственная реальная возможность - сделатьлогика там максимально проста.

0 голосов
/ 27 июня 2011

Используйте RhinoMocks и кодируйте что-то вроде этого:

    [Test]
    public void Test()
    {

        //Mocking is initialized
        MockRepository mockRepository = new MockRepository();


        //Mock of interface is created
        ISomeClass someClass = mockRepository.Stub<ISomeClass>(); 


        //Setup that the method call results in an exception being thrown.
        someClass.Stub(x=> x.DoSomeThing()).Throw(new Exception());


        //Mock is "activated"
        mockRepository.ReplayAll();


        //Here the method is called and it does indeed throw an exception
        Assert.Throws<Exception>(someClass.DoSomeThing);

    }
0 голосов
/ 27 июня 2011

Действительно возможно написать тест, который проверяет, была ли выбрана конкретная ошибка. Посмотрите на http://www.nunit.org/index.php?p=exception&r=2.4 - эквивалент MSTest - ExpectedExceptionAttribute, если это ваш фреймворк тестирования: o)

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