В предыдущем сообщении я рассказывал про основы тестирования NHibernate с использованием SQLite in-memory. А сейчас как и обещал, расскажу, как проводить тестирование в хорошем, не загромождающем код тестов инфраструктурными деталями стиле.
Кто читал книжку Джейсона Дентлера (Jason Dentler) наверно заметил, насколько огромен и сложен код теста. В одном из прошлых проектов я реализовывал нечто подобное. Класс работал, и выполнял свои функции. Но мне казался неуклюжим. Остались две важные претензии:
- Базовый класс сам по себе большой и сложный (большее 300 строк кода).
- Мешает пользоваться другими базовыми классами (нет желания копировать его из проекта в проект).
Поэтому для проекта Enhima решил создать новый компонент, в основу которого положил принципы легковесности, минимального влияния на код теста, никаких ужасных базовых классов-переростков, никаких конфигураций. Сделать схему перед тестом, и удалить после. Всё! Так родился SQLiteInMemorySchemaMaker. Он прост в использовании, его можно легко прикрутить к любому тесту. Например так:
[TestFixture]public class DomainMapperFixture{private Configuration _config;
private SQLiteInMemorySchemaMaker _schemaMaker;
[TestFixtureSetUp]public void TestFxtureSetup(){_config = new Configuration();
_config.ConfigureSQLiteInMemory().MapEntities(From.ThisApplication());_schemaMaker = new SQLiteInMemorySchemaMaker(_config);
}[SetUp]public void Setup(){_schemaMaker.CreateSchema();}[TearDown]public void TearDown(){_schemaMaker.DropSchema();}[Test]public void Do_the_test(){//Skipped
}}
Как видно, код теста остался весьма скромен. И меня это очень радует. Если понравилось, можно начинать пользоваться проектом Enhima уже сейчас (доступен через nuget).
Комментариев нет:
Отправить комментарий