所以,我对这次失败感到困惑。我正在使用 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 提供的帮助。我已经移动了源代码树并更新了大部分但不是所有的参考资料。我的测试项目引用了错误版本的实体框架。