2

所以,我对这次失败感到困惑。我正在使用 MSTest 来运行一些集成测试(因为有一个数据库支持这个,我想我们会这样称呼它而不是单元测试)并且有一个像这样的测试方法:

[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 throw exception System.Data.Entity.Infrastructure.DbUpdateException, but exception System.Data.Entity.Infrastructure.DbUpdateException is expected....” 它继续提到有一个MySql类型的内部异常.Data.MySqlClient.MySqlException:无法添加或更新子行:外键约束失败...”

我正在使用 MySql 连接器 6.4.4、实体框架 4.3、VS 2010,如果其中有任何有用的信息。

想法?


解决方案:

感谢 Ladislav 提供的帮助。我已经移动了源代码树并更新了大部分但不是所有的参考资料。我的测试项目引用了错误版本的实体框架。

4

1 回答 1

1

正如我在评论中指出的那样,这看起来像是解决方案中的项目使用不同版本的 EntityFramework.dll 库的问题。

于 2012-03-06T20:03:30.127 回答