C#实体测试 - 在调试时,测试通过但在运行模式下失败

时间:2016-09-10 16:09:30

标签: c# unit-testing testing

我想检查我的删除方法是否有效:)我在数据库中添加了一个元组。

TestMethod的

 [TestMethod]
    public void DeleteIngredient()
    {
        using (var ctx = new TestDbContext())
        {
            //Arrange
            Ingredient ingredient = new TestClass.Ingredient();
            ingredient.Id = 1;
            ingredient.Name = "Watermelon";
            ingredient.VegeOrVegetarian = VeganType.Both;
            //Act
            ctx.ingredients.Add(ingredient);
            ctx.SaveChanges();
            IngredientService service = new IngredientService(ctx);
            service.removeIngredient(1);
            service.saveChanges();

            //Assert
            Assert.AreEqual(0, ctx.ingredients.Count());
        }
    }

服务

        public class IngredientService
{
    private readonly TestDbContext _TestDbContext;

    public IngredientService(TestDbContext TestDbContext)
    {
        _TestDbContext = TestDbContext;
    }

    public List<Ingredient> getIngredients()
    {
        return _TestDbContext.ingredients.ToList();
    }

    public void removeIngredient(int id)
    {
        var toRemove = _TestDbContext.ingredients.Find(id);       
        _TestDbContext.ingredients.Remove(toRemove);

    }
    public void saveChanges()
    {
        _TestDbContext.SaveChanges();
    }
}

Everthing在调试模式下工作。

Assert.AreEqual(0, ctx.ingredients.Count());

我被告知测试通过。 但是在运行模式下运行所有​​测试后,包括这个删除,我收到了错误。

  

Assert.AreEqual失败预期:&lt; 0&gt;。实际&LT 1为卤素;

我认为上下文存在问题。有任何线索如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

简短版本:

请勿使用DbContext获取验证所需的数据。要获取此数据,请不要使用ORM方法:DbConnection,DbCommand等。

测试算法:

  1. 通过ORM方法从数据库获取StartData。
  2. 执行您要使用ORM方法测试的内容。
  3. 处置ORM上下文或关闭会话。
  4. 通过ORM方法从数据库获取EndData。
  5. 验证数据。

用这样的为什么做这个的答案很复杂。由于使用了不同版本和类型的库进行测试,因此ORM和数据库提供程序无法对可能出问题的地方给出简单的答案。

对不起,我的英语。