我有一个简单的标准存储库,从数据库加载一个复合实体。它通过IDbConnection
(我们可以模拟知识库访问IDbCommand
,IDbTransaction
,IDataReader
)注入从数据库中读取完整实体树所需的所有依赖关系。单元测试,以验证存储库从数据库正确加载实体
public class SomeCompositionRootEntityRepository :
IRepository<SomeCompositionRoot>
{
public RecipeRepository(IDbConnection connection) { ... }
public void Add(SomeCompositionRootEntity item) { ... }
public bool Remove(SomeCompositionRootEntity item) { ... }
public void Update(SomeCompositionRootEntity item) { ... }
public SomeCompositionRootEntity GetById(object id) { ... }
public bool Contains(object id) { ... }
}
问题是,我将如何编写单元测试的这个好方法?如果我想测试一下reposity已经读取了整个对象树,并且它已经读取了它的正确性,我需要编写一个hughe mock来记录和验证树中每个对象的每个属性的读取。这真的是要走的路吗?
更新: 我想我需要重构我的存储库,以便将存储库功能和单元测试分解为更小的单元。这怎么能做到?
我确定我不想编写涉及从实际数据库读写数据的单元测试。
对于任何给定的'SomeCompositionRootEntity'我想测试它读取所有对象和子对象,读取属性所需的所有列,正确组装对象树,写入所有对象,写入所有属性。由于这棵树相当复杂,我似乎必须写出几个非常庞大而庞大的单元测试。我想要正确的东西吗? – bitbonk
所有这些功能都是在仓库的方法中编码的吗?如果是这样,你应该考虑分开测试方法来单独测试零件。简单的简短方法很好。如果此功能是从外部提供的(例如来自关系映射程序),则不应该对其进行详细测试。 – Arne
我在.NET 2.0中,我不想使用任何第三方ORM。这种功能如何分解? – bitbonk