Проект тестирования модулей (NUnit) создан для тестирования Business Logic. Подавляющее большинство этой логики находится в моем проекте Business Logic. У меня есть отдельная DLL со всем этим. Мое приложение является многоуровневым и имеет проект для интерфейса пользователя, уровня обслуживания, бизнес-логики и доступа к данным.Ссылки на проекты проекта Unit Test
В настоящее время UI ссылки Service.Service ссылаются на BL, BL ссылки DA. По всем проектам.
У меня есть общий проект, на который ссылаются все проекты. Он содержит объекты DTO и некоторые общие ENUMS и некоторые биты кода.
В моем аксессуаре данных у меня есть класс «База данных» (например). У него много методов манипулирования данными ... get Person, update person и т. Д. У меня также есть база данных интерфейса в том же проекте.
В моем тестовом проекте я хочу высмеять вызовы базы данных. Но мой конструктор в моем BL, имеет ссылку на базу данных, поэтому я могу использовать IoC. Чтобы иметь возможность высмеивать это из моих модульных тестов, мне нужно иметь ссылку на проект на уровень базы данных. Это нормально? Это из-за IoC и метода вызова, который должен предоставить конструктору конкретный класс.
Спасибо. Итак, интерфейсы должны действительно быть в вызове позже? Это кажется странным, потому что дальше, если у вас есть пользовательский интерфейс, позже вызывающий службу позже, похоже, что интерфейсы будут в пользовательском интерфейсе позже для служб? – Craig
Нет, это не так масштабируется, а скорее: если вы думаете с точки зрения DDD (Domain Driven Design), я бы попытался сохранить большую часть своих _interfaces_ в ** Domain **, что в обратитесь к большинству других частей приложения (включая слой пользовательского интерфейса); однако он был бы в значительной степени единственным, в то время как другие слои (например, DB) могли бы получить ссылку только на загрузку IoC (например, корневой каталог) –