У меня есть проект, в котором я использую сгенерированный код .nettiers в качестве моего DAL.
В настоящее время мои тесты состоят из физической настройки тестовых данных в базе данных для каждого теста, а затем разрешения объектам nettiers попадать в базу данных и возвращаться по мере необходимости.
Очевидно, что это не особенно эффективно, и до сих пор мои 250 с лишним тестов занимали около 10 минут, поэтому я пытался добавить в мои тесты насмешку.
Хотя я почти уверен, что понимаю концепции макетирования вызовов базы данных, у меня возникают проблемы с его применением, в частности, к неттье, поскольку он довольно сильно связан с базой данных.
Один из методов, которые я хочу протестировать, выглядит следующим образом (для краткости немного сокращен):
public class InterfaceManagerService
{
public DataDocument SaveDataDocument(DataDocument entity)
{
var lookupEntity = DataRepository.DataDocumentProvider.GetByDocumentId(entity.DocumentId);
if (lookupEntity == null)
{
File fileEntity = new File();
fileEntity.Name = entity.Name;
var savedFileEntity = DataRepository.FileProvider.Save(fileEntity);
entity.FileId = savedFileEntity.FileId;
var savedEntity = DataRepository.DataDocumentProvider.Save(entity);
return (savedEntity);
}
}
}
В настоящее время я использую пробную версию Typemock, так как она, кажется, делает то, что требуется, но я открыта для любых альтернатив, особенно с открытым исходным кодом.
Первая проблема, с которой я столкнулся, заключалась в том, что мне нужно было создать поддельный экземпляр InterfaceManagerService, или DataRepository, или самих сущностей (у сущностей нетто есть интерфейс, который может быть полезен).
Вторая проблема заключается в том, как создать поддельный объект, который должен быть возвращен, поскольку nettiers помещает кучу дополнительных свойств в сущности, что приведет к большим и громоздким тестам, если я создам поддельный экземпляр каждого объекта I ' м ожидаю.
Полагаю, в конечном счете, я ищу какое-то направление, чтобы наилучшим образом написать модульные тесты для методов, использующих методы хранилища данных nettiers, но чтобы избежать попадания в базу данных, поскольку, похоже, об этом много не говорится. Интернет в настоящее время.