Достижение модульной тестируемости 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
  }
}
Другие вопросы по тегам