나는 내 컨트롤러에서 다음과 같은 방법을 테스트 다음 테스트 케이스를버그 일 수 있습니까?
[TestMethod()]
[DeploymentItem("Courses.sdf")]
public void RemoveCourseConfirmedTest()
{
CoursesController_Accessor target = new CoursesController_Accessor();
int id = 50;
ActionResult actual;
CoursesDBContext db = target.db;
Course courseToDelete = db.Courses.Find(id);
List<CourseMeet> meets = courseToDelete.meets.ToList<CourseMeet>();
actual = target.RemoveCourseConfirmed(courseToDelete);
foreach (var meet in meets)
{
Assert.IsNull(db.Meets.find(meet));
}
Assert.IsNull(db.Courses.Find(courseToDelete.courseID));
}
있습니다.
[HttpPost, ActionName("RemoveCourse")]
public ActionResult RemoveCourseConfirmed(Course course)
{
try
{
db.Entry(course).State = EntityState.Deleted;
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DbUpdateConcurrencyException)
{
return RedirectToAction("RemoveMeet", new System.Web.Routing.RouteValueDictionary { { "concurrencyError", true } });
}
catch (DataException)
{
ModelState.AddModelError(string.Empty, "Unable to save changes. Try again.");
return View(course);
}
}
저는 모의 DB를 사용해야한다는 것을 알고 있습니다 ....하지만이 프로젝트에서는이 접근 방식을 채택하기로 결정했습니다.
이 경우 어떻게됩니까? 실제 웹 사이트를 실행할 때이 함수는 완벽하게 작동하고 코스와 모든 속셈을 제거합니다. 내가 테스트를 실행할 때
는하지만 난 내가 테스트
List<CourseMeet> meets = courseToDelete.meets.ToList<CourseMeet>();
에서 다음 줄을 주석 루프를 교체 할 경우 다음
System.InvalidOperationException: The operation failed: The relationship could not be
changed because one or more of the foreign-key properties is non-nullable. When a change is
made to a relationship, the related foreign-key property is set to a null value. If the
foreign-key does not support null values, a new relationship must be defined, the foreign-
key property must be assigned another non-null value, or the unrelated object must be
deleted.
이 더욱 흥미로운 부분이다 다음과 같은 예외를 얻을 다음과 같습니다.
예외 및 테스트 사례를 통과시키지 마십시오.
Entity Framework에 대한 정보가 누락되었거나 버그입니까?
코스에 대한 하위 테이블은 무엇입니까? 내가 아는 한, EF는 기본적으로 하위 엔티티를 삭제하지 않고 부모에 대한 외래 키를 null로 설정합니다. 오류 메시지에서 그 것처럼 보입니다. – magnus
그게 내가 인터넷에서 발견 한거야. 그러나 액트 응용 프로그램을 실행하면 코스가 삭제되고 DB에서 어린이 (couse meets)가 삭제됩니다. 또한 선을 제거하면 테스트가 통과됩니다. – keshav