假设我们有典型的存储库
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 获取实体
- 断言实体由 Repository 返回
但是当我考虑更新方法测试时,一切都变得有些棘手。 主要问题是
- 如何确保数据库已经存储了我可以获取并尝试的对象 更新?
- 如何针对空数据库测试更新?
看起来解决方法需要一些不必要的代码,测试会变得臃肿。 有什么好办法吗?
最佳答案
使用ClassInitialize TestInitialize , 以及 ClassCleanup和 TestCleanup用众所周知的实体预填充数据库。然后针对它们运行您的 Update()
测试。
不确定如何解释“不必要的代码”...看起来您将不得不做一些事情来填充您的数据库以测试 Update()
方法;至少使用上面列出的属性可以让您实现初始化和清理数据库所需的逻辑,而不会污染实际的测试方法。
关于c# - 单元测试 Repository.Update 方法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10362287/