【发布时间】:2017-07-27 00:08:02
【问题描述】:
我正在使用 Nunit 在我的控制器中测试一个方法,该方法从数据库中删除一条记录。一切正常,当我检查时记录被删除,但不知何故
db.AssesorMaxProjectLoad.Find(previousLoad.ID)
仍然返回删除的值并使我的测试失败。
测试:
[Test]
public void AssesorMaxProjectLoadsDeleteLoad()
{
var previousLoad = db.AssesorMaxProjectLoad.Where(t => t.AssesorID == testAssesor3ID).FirstOrDefault(t => t.TaskGroupID == taskGroupID);
var result = controller.DeleteConfirmed(previousLoad.ID) as ViewResultBase;
var newProjectLoad = db.AssesorMaxProjectLoad.Find(previousLoad.ID).MaxAssignedProjectLoad;
Assert.AreEqual(null, newProjectLoad);
}
控制器方法及其测试:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
AssesorMaxProjectLoad assesorMaxProjectLoad = db.AssesorMaxProjectLoad.Find(id);
db.AssesorMaxProjectLoad.Remove(assesorMaxProjectLoad);
db.SaveChanges();
return RedirectToAction("Index", "AssesorMaxProjectLoads", new { id = assesorMaxProjectLoad.TaskGroupID });
}
发生了什么或者我错过了什么?我不明白当它不再在数据库中时如何返回它?
【问题讨论】:
-
你的测试中 db 来自哪里?是否有可能它是一个不同的上下文实例并且它已经缓存了实体?
-
这是一个集成测试吗?
-
是的,它确实是一个集成测试
标签: c# asp.net-mvc unit-testing nunit