【发布时间】:2015-11-07 22:00:40
【问题描述】:
我的代码基本上是这样的:
数据访问合同:
public interface IProvideDataAccess<T>
where T : Entity
{
IEnumerable<T> Select(Func<T, bool> condition);
void Save(T entity);
void Delete(T entity);
}
数据访问层:
public class Db4oProvider<T> : IProvideDataAccess<T>
where T : Entity
{
private IEmbeddedConfiguration _configuration;
private string _connectionString;
public Db4oAccesDonnees(string connectionString)
{
_connectionString = connectionString;
_configuration = Db4oEmbedded.NewConfiguration();
}
IEnumerable<T> IProvideDataAccess<T>.Select(Func<T, bool> condition)
{
using (IObjectContainer db = Db4oEmbedded.OpenFile(_configuration, _connexion))
{
return db.Query<T>(e => condition(e));
}
}
void IProvideDataAccess<T>.Save(T entity)
{
using (IObjectContainer db = Db4oEmbedded.OpenFile(_configuration, _connexion))
{
db.Store(entity);
}
}
void IProvideDataAccess<T>.Delete(T entity)
{
using (IObjectContainer db = Db4oEmbedded.OpenFile(_configuration, _connexion))
{
db.Delete(entity);
}
}
}
业务逻辑层:
public class MyRepository
{
protected IProvideDataAccess<MyEntityType> _dataAccessProvider;
public MyRepository(IProvideDataAccess<MyEntityType> dataAccessProvider)
{
_dataAccessProvider = dataAccessProvider;
}
public IEnumerable<MyEntityType> SelectValidEntities()
{
return _dataAccessProvider.Select(e => /* test if entity is valid */);
}
}
单元/集成测试对我来说相当新,我不知道从哪里开始。
我认为合乎逻辑的做法是
- 为 DAL 编写集成测试
- 为 BLL 编写单元测试(使用假 DAL)
我说的对吗?
我最大的问题是“选择”方法及其 Func 参数。我如何测试/模拟它?
基本上,我应该为这两个类写什么测试?
【问题讨论】:
标签: c# unit-testing mocking integration-testing data-access-layer