Как 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 Вызывается в базовом конструкторе, возможно, вам придется использовать статический и быть осторожным с очисткой состояния, но я уверен, что это работает как есть.

Другие вопросы по тегам