Достижение модульной тестируемости Presenter при использовании CSLA Framework с WCSF
WCSF использует шаблон Model View Presenter (MVP) для организации / структурирования исходного кода для веб-сайта. Когда шаблон MVP используется правильно, он обеспечивает разделение проблем, тестируемость логики презентатора и т. Д.
Как заставить инфраструктуру WCSF и CSLA хорошо играть (работать вместе) для достижения модульной тестируемости логики презентатора. Для достижения модульной тестируемости логики презентатора требуется, чтобы весь доступ к данным и другие зависимости были смоделированы или заглушены.
1 ответ
При выполнении методов портала данных в объекте CSLA содержимое этих методов портала данных должно вызывать dataservices для получения и обновления этих данных. Эти веб-сервисы должны быть основаны на интерфейсе, чтобы их можно было отключить.
Вот пример заполнения объекта сотрудника:
private void DataPortal_Fetch(SingleCriteria<Employee, int> criteria)
{
IEmployeeDTO data = DataServiceContext.Current.EmployeeDataService.GetEmployee(criteria.Value);
// Just do left to right copying here
LoadProperty<int>(IdProperty, data.Id);
}
Тогда EmployeeDataService - это просто интерфейс. Мы используем Ninject для создания конкретного класса для этого интерфейса, который будет указывать на другую сборку для технологии доступа к данным, которую вы хотите использовать. Затем вы можете указать другой конкретный класс для тестового класса.
Вот пример интерфейса службы данных:
public interface IEmployeeDataService
{
IEmployeeDTO GetEmployee(int id);
}
Вот пример конкретного класса службы данных для использования Linq 2 SQL:
namespace XXX.DataServices.Linq
{
public class EmployeeDataService : IEmployeeDataService
{
public IEmployeeDTO GetEmployee(int id)
{
// use Linq to SQL to get the data and transform that class into IEmployeeDTO
}
}
}
Вот пример сервиса данных для тестирования:
namespace XXX.DataServices.Testing
{
public class IEmployeeDTO GetEmployee(int id)
{
// mock up several IEmployeeDTO objects with known data
}
}