Testen: Entity Framework durch Fälschen des Kontexts

Ich esse mich gerade auf. Es ist, als ob Entity Framework nicht testbar ist. Ich habe eine Menge Beiträge und Threads gelesen, in denen Arbeitseinheiten, MoQs oder das Repo-Muster verwendet werden.

Ich bin in einer Phase, in der ich nicht viel an meiner Architektur meiner Anwendung ändern kann. Die Anwendung funktioniert derzeit vollständig, aber um sicherzugehen, dass ich eine hohe Codeabdeckung haben muss, ist dies ein Test.

Zum Testen verwende ich die "Fake Context" -Methode, bei der ich die falsche zum Verspotten und die echte zum Herstellen einer Verbindung zur Datenbank verwenden kann.

Ich habe das als Beispiel genommen.http://romiller.com/2010/09/07/ef-ctp4-tips-tricks-testing-with-fake-dbcontext/

Dort können Sie sehen, dass der Kontext aufgeteilt und als Schnittstelle verwendet wird. Mögen:

    public interface IEmployeeContext
    {
        IDbSet Department Departments { get; }
        IDbSet Employee Employees { get; }
        int SaveChanges();
    }

    public class EmployeeContext : DbContext, IEmployeeContext
    {
        public IDbSet Department Departments { get; set; }
        public IDbSet Employee Employees { get; set; }
    }

    public class FakeEmployeeContext : IEmployeeContext
    {
        public FakeEmployeeContext()
        {
            this.Departments = new FakeDepartmentSet();
            this.Employees = new FakeEmployeeSet();
        }

        public IDbSet Department Departments { get; private set; }

        public IDbSet Employee Employees { get; private set; }

        public int SaveChanges()
        { 
         return 0; 
        }
    }

    }

Also testen und alles funktioniert. Das einzige, was ich anscheinend nicht tun kann, ist, einen Controller mit .State darin zu testen, in dem ich überprüfe, ob er geändert wurde. Beispiel: EntityState.Modified

Da dies eine Schnittstelle verwendet, muss ich das in den Schnittstellenkontext einfügen. Und erstelle eine neue. Oder vermisse ich etwas? Es ist wahrscheinlich nicht die Absicht, dass ich die gesamte Methode in diesem Kontext erstelle. Wie kann ich es schaffen, dass dies funktioniert?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage