所以,我对这次失败感到困惑。我正在使用MSTest来运行一些集成测试(因为有一个DB支持这个,我想我们称之为而不是单元测试)并且有一个类似的测试方法:
[TestMethod()]
[ExpectedException(typeof(DbUpdateException))]
public void AddRecipe_InvalidCookingMethod_ExpectExceptionThrown()
{
var target = GetRepository();
var recipe = new Recipe()
{
Method = "Sous-vide"
}
target.AddRecipe(recipe);
}
并且AddRecipe
看起来像这样:
public void AddRecipe(Recipe recipe)
{
// validation stuff
// automapper stuff
try
{
using (var context = GetContext())
{
context.recipes.Add(recipe);
context.SaveChanges();
}
}
catch (DbUpdateException ex)
{
Console.WriteLine(ex.ToString());
throw;
}
}
基础表有一个cooking_method
表的外键,在这种情况下,我试图插入的配方有一个不在该表中的烹饪方法,所以我希望 DbUpdateException 将被抛出。
测试失败并指出“AddRecipe_InvalidCookingMethod_ExpectExceptionThrown引发了异常System.Data.Entity.Infrastructure.DbUpdateException,但是预期会出现异常System.Data.Entity.Infrastructure.DbUpdateException ....”它继续提到内部异常类型 MySql.Data.MySqlClient.MySqlException :无法添加或更新子行:外键约束失败...“
我正在使用MySql连接器6.4.4,实体框架4.3,VS 2010,如果其中任何一个是有用的信息。
想法?
SOLUTION:
感谢Ladislav帮忙解决这个问题。我移动了源代码树并更新了 most 但未更新所有引用。我的测试项目引用了错误版本的Entity Framework。
答案 0 :(得分:1)
正如我在评论中所指出的,这看起来像解决方案中的项目使用不同版本的EntityFramework.dll库的问题。