Ich arbeite daran, EF einfacher zum Komponententest zu machen, indem ich einige Helfer schreibe, die Eigenschaften für mich machen. Ich habe ein paar Play FelderTyp mit einem generischen Rückgabetyp einschalten
private Mock<DbSet<Workflow>> mockedWorkFlows;
private Mock<DbSet<WorkflowError>> mockedWorkFlowErrors;
Und ich möchte eine generische Funktion mich das richtige Trägerfeld zurückkehren zu können, mit der folgenden Funktion
public Mock<DbSet<T>> Mocked<T>(T t) where T : class
{
if ((object)t is Workflow)
{
return mockedWorkFlows; //cannot Workflow to T
}
}
Es gibt mehrere private Träger Felder, die ich will basierend auf dem übergebenen Typ zurückgegeben werden.
Allerdings, auch wenn ich eine Klassenbeschränkung von Workflow
hinzufügen, bekomme ich den gleichen Fehler.
Ich habe auch versucht t's
Typ zu schalten, aber kein Glück gibt es auch nicht. Die Typen der verschiedenen unterstützenden Felder haben keinen gemeinsamen Vorfahren, außer Objekt. Ist das, was ich versuche, möglich?
Ich sehe nicht, was der Sinn dieser Methode wäre. Das Erstellen eines Mocks dauert 1 Zeile Code und wenn Sie den Mock einrichten möchten, müssen Sie jeden Mock trotzdem individuell einrichten, also warum erstellen Sie nicht einfach eine Factory für Mocks bestimmter Typen. – FCin
Es ist mehr als eine Codezeile, um ein IDbSet aus Ihrem EF-Kontext zu verspotten. Ich habe eine fließende Schnittstelle für die Zuordnung der Daten, aber Sie müssen das Hintergrundfeld irgendwo offenlegen, denn wenn Sie es ausspionieren, wird das tatsächlich aufgerufen. Ich möchte nur eine kleinere API, anstatt einen WorkflowSMocked, WorkflowErrorsMocked usw. für alle IDbSet-Eigenschaften des Kontextes. –
wootscootinboogie
Anstatt sich über das 'DbSet' lustig zu machen, haben Sie sich überlegt, stattdessen die' SqlConnection' zu verspotten, zum Beispiel mit dem Effort Framework? https://github.com/tamasflasich/effort –