Являются ли тесты, которые MsTest генерирует настоящими модульными тестами? - PullRequest
2 голосов
/ 17 сентября 2010

Visual Studio 2010 сгенерировал для меня кучу модульных тестов, что кажется удобным, но я задаюсь вопросом, являются ли они настоящими модульными тестами.Например, он сгенерировал тест под названием SaveTest, который выполняет следующий код:

User user = new User();  //I have to create a user
user.Save(); //This saves the user to the database.
//Assertions here....

Проблема, с которой я столкнулся выше, заключается в том, что из того, что я прочитал, предполагается, что модульные тесты должны проверять вещи в изоляции, поэтомутестирование Сохранение в базе данных, это не модульный тест, или я ошибаюсь, и MsTest ошибается?В качестве примечания: пользователь генерируется из dbml и Save calles SubmitChanges в моем DataContext.

Ответы [ 3 ]

9 голосов
/ 17 сентября 2010

Автоматически сгенерированные тесты являются только модульными тестами, если вы уже проделали необходимую работу для изоляции зависимостей, чтобы вызовы с побочными эффектами могли быть направлены на соответствующие ложные или заглушенные зависимости для определения желаемых эффектов. Инструменты не будут выполнять работу по архитектуре вашего кода для поддержки модульного тестирования; все, что они могут сделать, - это создавать звонки в различные публичные точки доступа. Вам также все равно придется выполнить работу по организации состояний зависимости для каждого теста и утверждению условий, которые вы хотите проверить.

2 голосов
/ 17 сентября 2010

MSTest, AFAIK, не будет достаточно умен, чтобы знать, как имитировать поведение, которое тестирует.Таким образом, если вы сами не высмеиваете зависимости пользователя от БД, это не модульный тест.

Фреймворки "модульного тестирования", такие как MSTest и NUnit, предоставляют немного больше, чем среда для запуска пакетапрограммных тестов.Вы украшаете метод с атрибутом [Test] или аналогичным, и он будет запускаться.Этот тест может быть на уровне единицы, интеграции, функциональности или даже уровня приемлемости, в зависимости от объема кода, охватываемого тестом.В нашем проекте у нас есть целая сборка только интеграционных тестов, которые охватывают целые вертикальные фрагменты функциональности и даже модели клиентских приемочных тестов.Все это написано с использованием фреймворка NUnit.

Ваша среда разработки не может помешать вам делать ошибки в разработке;если бы это было правдой, не было бы необходимости в QA.

0 голосов
/ 17 сентября 2010

Все эти платформы модульных тестов на самом деле не ограничены в проведении модульных тестов.

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

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

Если, с другой стороны, класс, имеющий жесткую зависимость от внешней системы, не просто тонкий класс, то проблема в вашем коде;). Обращайтесь к нему, и по натуре ваши тесты не будут иметь этой проблемы.

...