【发布时间】:2018-10-19 15:32:28
【问题描述】:
我的实体如下:
public class Class1
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Class2 Class2{ get; set; }
}
public class Class2
{
[Key, ForeignKey("Class1")]
public int Id { get; set; }
public int? Price { get; set; }
public virtual Class1 Class1{ get; set; }
}
我有以下测试,我预计会失败但它通过了:
[TestMethod]
public void CreateClass2()
{
var mockSet = new Mock<DbSet<Class2>>();
var mockContext = new Mock<theContext>();
mockContext.Setup(m => m.Class2s).Returns(mockSet.Object);
var service = new Class2Service(mockContext.Object);
service.AddClass2(10, 100);
mockSet.Verify(m => m.Add(It.IsAny<Class2>()), Times.Once());
mockContext.Verify(m => m.SaveChanges(), Times.Once());
}
这就是service.AddClass2 方法:
public class Class2Service
{
private readonly theContext _context;
public CoordService(theContext context)
{
_context = context;
}
public Class2 AddClass2(int id, int? price)
{
var class2 = _context.Class2s.Add(new Class2 { Id = id, Price = price });
_context.SaveChanges();
return class2;
}
}
由于我还没有添加Class1 并且为Class2 输入了无效的id(即它在Class1 中不存在),Class2 的新条目应该是无效的,因为我已经限制它与外键。 在我的项目和真实数据库中,它按预期工作并给我错误,但在这个测试中它通过了!
【问题讨论】:
-
我认为你的 ForeignKey("Class1") 应该是 ForeignKey("Class1Id")
-
@Steve 这个
ForeignKey行为在我的数据库中按预期工作,并且真正添加了 Class2,它只是在测试中不起作用。
标签: c# entity-framework unit-testing testing mocking