我正在为我的一个项目创建数据访问层,它只是实体框架的外观接口,因此除了调用实体框架方法之外,大多数底层调用都不包含任何逻辑.
现在,我的一位同事说我应该对每一种方法进行单元测试,即使它们只包含一个电话,而且我认为这听起来过于激进,对我来说这似乎是一种臃肿,是吗?
除了测试我已经做过的参数之外,没有真正的情况可以测试,我认为没有理由测试没有任何控制结构的方法.
你怎么看 ?
/// <summary> Adds the entity to the context. </summary>
/// <param name="entity"> The entity to add. </param>
public void Add(object entity)
{
var name = GetEntitySetName(entity);
Context.AddObject(name, entity);
}
/// <summary> Updates the entity in the context with the given entity data; otherwise, attaches it to the context in attempt to update the related record in the data source on the next call to commit. </summary>
/// <param name="entity"> The entity to use for the update. </param>
public void Update(object entity)
{
var name = GetEntitySetName(entity);
var manager = Context.ObjectStateManager;
EntityKey key = Context.CreateEntityKey(name, entity);
ObjectStateEntry entry;
if (manager.TryGetObjectStateEntry(key, out entry))
{
entry.ApplyCurrentValues(entity);
}
else
{
Context.AttachTo(name, entity);
manager.ChangeObjectState(entity, EntityState.Modified);
}
}
Update和Add方法中的Context是伪造的,但是就像真实的一样,我知道在大多数情况下这将是极端的,但是我们无法对数据库进行测试,至少在当前阶段是这样.
所以到目前为止,我的同事说我应该测试这个“添加”方法作为我的Uni测试的一部分,让我真的很困惑,他声称每个公共方法都需要单元测试.
在我看来它似乎是激进的,因为它就像质疑对实体框架的.AddObject的调用是否会起作用,我认为它会.
我真正想知道的是,您是否将测试其中没有控制结构的方法,并且是否真的需要测试对第三方库的调用?我想不是.
最佳答案 包装EF功能的测试方法不是单元测试,而是集成测试,它实际上有一个原因,因为它验证了您的DAL正在使用真实数据库.它不是关于测试它的参数或者是什么,而是测试映射是否与真实数据库一起工作,记录是真正读取还是持久化等等.