2009-02-23 14 views
6

Ich versuche, mit Moq zu beginnen und Probleme zu haben, gute Ressourcen zu finden, um zu tun, was ich brauche.Mocking Datasets mit Moq

Ich habe eine Data Interface-Klasse, die eine Get-Methode hat, die ein Dataset über Stored Procedure zurückgibt. So wurde der Code geschrieben und ich kann ihn im Moment nicht ändern, also muss es so gemacht werden.

Ich möchte diese Klasse testen, indem ich den Datensatz verspotte und Daten zurücksende, so dass ich keinen Datenbankaufruf machen muss.

Wer macht das und wenn, wo ist ein guter Ort, um damit anzufangen?

Antwort

7

Sie benötigen keine Datenbankverbindung, um ein DataSet auszufüllen. Sie können es so vortäuschen:

IDataInterface di = new Mock<IDataInterface>(); 
DataSet mockDataSet = CreateMockDataSet(); 
di.Expect(x => x.Get()).Returns(mockDataSet); 
something.UseDataInterface(di.Object); 

Füllen Sie ein Mock DataSet ist ziemlich schmerzhaft, obwohl. Wenn ich dies tue, lege ich im Allgemeinen eine Fassade-Schnittstelle vor das zurückgegebene DataSet, die leichter zu verspotten ist. Oder ich ändere den Code, um eine DataTable zu verwenden, die einfacher auszufüllen ist.

Alternativ können Sie eine eingebettete Datenbank wie SQLite oder SQL Server CE für Ihre Komponententests verwenden.

+1

um ... was macht CreateMockDataSet()? Ich dachte, das war die Frage –

+1

Guter Punkt. Ich glaube, dass das OP dachte, dass sie die Schnittstelle von 'DataSet' verspotten müssten, und meine Antwort weist darauf hin, dass dies nicht benötigt wird. 'CreateMockDataSet()' würde einfach eine Menge 'DataTable'-Instanzen erstellen und sie in das' DataSet' setzen, als ob sie von der realen Datenbank zurückgegeben worden wären. –