Достижение возможности модульного тестирования Presenter при использовании CSLA Framework с WCSF

WCSF использует шаблон Model View Presenter (MVP) для организации / структурирования исходного кода для веб-сайта. Когда шаблон MVP используется правильно, он обеспечивает разделение проблем, возможность модульного тестирования логики докладчика и т. Д.

Как заставить WCSF и CSLA работать хорошо (работать вместе) для достижения модульной тестируемости логики докладчика. Для обеспечения возможности модульного тестирования логики презентатора необходимо, чтобы все операции доступа к данным и другие зависимости были имитированы или заглушены.


person Anand Patel    schedule 03.11.2009    source источник


Ответы (1)


При выполнении методов портала данных в объекте CSLA содержимое этих методов портала данных должно вызывать службы данных для получения и обновления этих данных. Эти веб-сервисы должны быть просто интерфейсными, чтобы их можно было смоделировать.

Вот пример заполнения объекта сотрудника:

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
  }
}
person Jamie Wright    schedule 26.09.2010