Ich versuche, meine EF6 DbContext
zu verhöhnen und alles funktioniert für Add
, Update
, Find
Methoden. Aber es funktioniert nicht für Remove
Methode aus unbekannten Gründen.Moq & EF6 - Mocking EF6 Entfernen Sie die Methode, ein Objekt nicht entfernen
Theoretisch sollte nach dem Entfernen der Students
Sammlung nur noch 1 Rücksprung übrig sein. Aber es gibt immer wieder den Count - 2.
Ich habe 3 Moq .Verify
überprüft, um sicherzustellen, dass alle Methoden aufgerufen werden und sie tatsächlich ausgeführt werden. Aber es entfernt das Objekt nicht wirklich aus der Schülersammlung.
Wenn ich Assert.Equal
Zeile kommentiert, die die Zählungen überprüfen, ist der ganze Test bestanden.
Löschen XUnit Methode
[Fact]
public void Delete()
{
Mock<DbContexts.MVCWebAppDbContext> dbContext = new Mock<DbContexts.MVCWebAppDbContext>();
IStudentsService studentService = new StudentsService(dbContext.Object);
var students = new List<Student>()
{
new Student() { StudentID = 1, RefNo = "12456343", FirstName = "John", LastName = "Smith", DateOfBirth = DateTime.Now.AddYears(-10), DateCreated = DateTime.Now },
new Student() { StudentID = 2, RefNo = "87984564", FirstName = "Pete", LastName = "Luck", DateOfBirth = DateTime.Now.AddYears(-20), DateCreated = DateTime.Now.AddDays(1) }
};
var mockSet = new Mock<DbSet<Student>>();
mockSet.As<IQueryable<Student>>().Setup(m => m.Provider).Returns(students.AsQueryable().Provider);
mockSet.As<IQueryable<Student>>().Setup(m => m.Expression).Returns(students.AsQueryable().Expression);
mockSet.As<IQueryable<Student>>().Setup(m => m.ElementType).Returns(students.AsQueryable().ElementType);
mockSet.As<IQueryable<Student>>().Setup(m => m.GetEnumerator()).Returns(students.AsQueryable().GetEnumerator());
mockSet.Setup(m => m.Remove(It.IsAny<Student>())).Callback<Student>((entity) => students.Remove(entity));
dbContext.Setup(c => c.Students).Returns(mockSet.Object);
int idToDelete = 1;
dbContext.Setup(s => s.Students.Find(idToDelete)).Returns(students.Single(s => s.StudentID == idToDelete));
// call delete method now
studentService.Delete(idToDelete);
// 1 object deleted, it should return 1
Assert.Equal(1, students.Count()); // <----- Error here
dbContext.Verify(s => s.Students.Find(idToDelete), Times.Once);
dbContext.Verify(s => s.Students.Remove(It.IsAny<Student>()), Times.Once);
dbContext.Verify(s => s.SaveChanges(), Times.Once);
}
StudentService.cs Delete-Methode
MVCWebAppDbContext _context;
public StudentsService(MVCWebAppDbContext context)
{
_context = context;
}
public int Delete(int id)
{
var objToDelete = _context.Students.Find(id);
if (objToDelete != null)
{
_context.Students.Remove(objToDelete);
return _context.SaveChanges();
}
return -1;
}
Könnte euch bitte helfen Sie mir mit diesem Remove-Methode spöttisch?
Und welchen Wert Delete zurückgibt? – Evk
Ich habe es debuggt und es gibt "1" zurück. – TTCG