假设我们有典型的存储库
public class Repository:IRepository<Entity>
{
public Entity GetById(int id)
{
//blah
}
public IEnumerable<Entity> All()
{
//blah
}
public void Insert(Entity entity)
{
}
public void Update(Entity entity)
{
//blah
}
public void Delete(Entity entity)
{
//blah
}
}
我想使用MSTest测试存储库插入和更新实体的能力。一旦是具体的存储库,我就针对一个真正的数据库进行测试。
因此,当我测试Insert方法时-策略很明确
建立新实体
保存
通过ID获取实体
断言实体由存储库返回
但是,当我想到Update方法测试时,一切都会变得有些棘手。
主要问题是
如何确保数据库已经存储了对象,以便我可以尝试获取
更新?
如何针对空数据库测试更新?
解决方法似乎需要一些不必要的代码,并且测试会变得肿。
有什么亲切的解决方案吗?
最佳答案
使用ClassInitialize TestInitialize以及ClassCleanup和TestCleanup来用众所周知的实体预填充数据库。然后对它们运行Update()
测试。
不确定如何解释“不必要的代码” ...看来您将不得不做一些事情来填充数据库以测试Update()
方法;至少使用上面列出的属性,您可以实现初始化和清理数据库所需的逻辑,而不会污染实际的测试方法。