我想检查我的删除方法是否有效:)我在数据库中添加了一个元组。
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为卤素;
我认为上下文存在问题。有任何线索如何解决这个问题?
答案 0 :(得分:0)
简短版本:
请勿使用DbContext获取验证所需的数据。要获取此数据,请不要使用ORM方法:DbConnection,DbCommand等。
测试算法:
用这样的为什么做这个的答案很复杂。由于使用了不同版本和类型的库进行测试,因此ORM和数据库提供程序无法对可能出问题的地方给出简单的答案。
对不起,我的英语。