我正在为DbContext实现一个XUnit测试,似乎DbContext没有正确处理。当我调试第一个测试时,它可以工作,但是在第二个测试中,抛出了已经添加的错误class FoodTableViewCell: UITableViewCell
{
override func awakeFromNib()
{
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool)
{
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
override func prepareForReuse()
{
self.accessoryType = UITableViewCellAccessoryType.none
//add code to reset selection if there is any other selection mechanism
}
}
。
添加观看后,在第二次测试中,listAds
为空,但在_context
被调用之前,其值为Advertisements
。
_context.Advertisements.AddRange(listAds);
答案 0 :(得分:7)
上下文被处理,但不是"内存数据库"本身。
那是"设计"允许您测试您测试的类正在创建它自己的DBContext实例的场景 - 否则您无法为它们准备数据。
您有两种可能性:
创建"不同的数据库"对于databaseName
的每项测试,代码为.UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
创建后(或context.Database.EnsureDeleted()
)强制数据库使用Dispose
销毁/重新创建。
对于您的测试类,方法2看起来更合适,但它取决于您。
文档:https://docs.microsoft.com/en-us/ef/core/miscellaneous/testing/in-memory