我在创建数据访问层,以我的一个项目的过程是,它只是一个门面接口实体框架,所以大部分的底层调用不包含逻辑,除了调用实体框架方法。EF,DAL门面和单元测试
现在,我的一个同事说我应该单元测试,即使它们包含一个电话,在我看来,这听起来过于激进,对我来说,似乎是一个膨胀,是不是每个单独的方法?
有没有真正的情况下,以测试在这里除了进行测试,我已经做参数,我看不出有任何理由来测试没有任何控制结构的方法。
您的意见是?
/// <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);
}
}
更新内部的语境和添加方法是伪造的,但就像真实的一个,我知道,在大多数情况下,这将是极端的,但我们不能在目前的测试对数据库,至少不阶段。
因此,我的这位同事说我应该测试这个“添加”方法作为我的Uni测试的一部分,让我感到非常困惑,他声称每一个公共方法都需要单元测试。
在我的脑海里似乎激进的,因为它就像质疑调用实体框架的.AddObject是否起作用,我认为会的。
我真正想知道的是你是否将测试没有控制结构,他们确实需要进行测试,以第三方库的调用方法?我想不是。
+1您需要测试某些时候,当您要求实体,你期望的实体被加载。这应该通过一个受控的数据库来完成,理想情况是在每个测试(最好但最慢)或测试夹具(不如很好但可能较快)或集成测试运行之前可以重新创建或重置该数据库。如果代码只读,那么这不是很重要,但如果它修改,那么它是。 – 2011-06-07 08:47:44
不幸的是,一旦你使用EntityFramework和EDMX文件切换数据库到内存中,一个并不容易,因为数据库提供者在文件中被硬编码。 – 2011-06-07 08:49:50
你在测试什么?你的测试方法中是否有任何实体queris的linq?或者一些代码CUD代码?在这种情况下,单元测试将不足以测试该方法。 – 2011-06-07 14:33:16