Как TDD с помощью.Net Data Services и сервисных операций
Мое текущее решение состоит в том, чтобы создать класс, который имеет мою бизнес-логику обслуживания / данных, проверить ее с помощью локальной базы данных (mdf), а затем обернуть этот класс идентичными функциями из класса обслуживания данных.
public class MyDataService : DataService<MyEntities>
{
[WebGet]
[SingleResult]
public Team GetTeam(string name)
{
return _serviceBusinessLogic.GetTeam(name);
}
}
//seam here to make this testable
public class ServiceBusinessLogic
{
public Team GetTeam(string name)
{
return _dbContext.Teams.SingleOrDefault(p => p.Name == name);
}
}
Но так как они идентичны, не должно быть необходимости в функциях-оболочках.
Я хотел бы напрямую протестировать службы данных, но у меня нет возможности установить DataSource, поскольку CreateDataSource защищен.
public class MyDataService : DataService<MyEntities>
{
[WebGet]
[SingleResult]
public Team GetTeam(string name)
{
//problem is CurrentDataSource is not settable, so cant set it in test
return CurrentDataSource.Teams.SingleOrDefault(p => p.Name == name);
}
}
1 ответ
Вы можете написать свой класс таким способом, который позволит вам внедрить ваш источник данных, например так:
public class MyDataService : DataService<MyEntities>
{
private MyEntities _dataSource;
public MyDataService() : this(new MyEntities()){}
public MyDataService(MyEntities dataSource)
{
_dataSource = dataSource;
}
protected override MyEntities CreateDataSource()
{
return _dataSource;
}
[WebGet]
[SingleResult]
public Team GetTeam(string name)
{
return CurrentDataSource.Teams.SingleOrDefault(p => p.Name == name);
}
}
Если CreateDataSource
Вызывается в базовом конструкторе, возможно, вам придется использовать статический и быть осторожным с очисткой состояния, но я уверен, что это работает как есть.