Wie man Unit-Test auf Remote-Store-Prozedur zu tun

Ich bin vor, um den Unit-Test auf der datazugriffsschicht zu machen, alle datazugriffsschicht-Aufrufdatenbank durch die memoryprozedur. Ich plane, eine saubere database für Unit-Tests, aber ich fand die meisten der memory-Prozedur wird Remote-Aufruf der anderen database, ich habe keine Ahnung, wie zu Unit-Test diese Art von memory-Prozedur, sollte ich alle verwandten database erstellen? oder irgendwelche anderen Lösungen?

Im Allgemeinen, je mehr Sie Ihre datazugriffsschicht weg von dem Rest der Anwendung abstrahieren können, desto besser können Sie es testing. Wie Jayden in einer anderen Antwort schrieb, ist Test Doubles wie dynamische Spott eine gute Lösung.

Allerdings, wie ich Ihre Frage verstehe, wollen Sie explizit Einheit testing Sie die datazugriffsschicht, und das ist auch okay. In diesem Fall werden Ihnen dynamische Spuren nicht helfen, da Sie die niedrigste Schicht in Ihrer Anwendung testing werden – es ist nichts mehr zu spüren. Manche Leute bestehen darauf, dass dies kein Unit-Test ist , sondern ein Integrationstest , aber ich denke, dass der wichtige Teil ist, ob der Test automatisiert ist oder nicht, und nicht das, was wir es nennen.

In jedem Fall, sobald Sie mit dem Testen der datazugriffsschicht beginnen, müssen Sie mehr oder weniger damit umgehen, wie es ist. Wenn es Remote-gespeicherte Prozeduren verwendet, dann musst du auch damit umgehen. Um das Setup ein bisschen einfacher zu machen, möchtest du die 'entfernte' database auf die gleiche Box als die 'lokale' database setzen.

Ein Unit-Test ist vor allem ein Verhaltenstest, also wäre das ok. Es sollten andere Arten von Tests ( Integrationstests oder Systemtests ) sein, die ein realistisches Setup mit vielen verteilten Maschinen etc. verwenden, um zu überprüfen, ob security, Vernetzung etc. wie vorgesehen funktioniert, aber das sollte nicht der Hauptfokus eines Unit-Tests sein .

Schau in object spöttisch.

Rhino Mocks ist eine Lösung dafür, du kannst es hier anschauen.

Mocking ermöglicht es Ihnen, datazugriff aus Ihrer database zu simulieren, ohne tatsächlich eine 'Test' database eingerichtet zu haben. Es gibt ein wenig Arbeit in der Einrichtung der Spott, aber es hält Ihre Tests konsistent.

Sie könnten erwägen, Ihre database zu strukturieren, die auf die andere verweist, so dass alle entfernten Tabellen über viewen zugänglich sind. Ich folge normalerweise einer Namenskonvention von:

vw_[DATABASENAME]_[TABLENAME] 

Die view besteht aus nichts anderem als:

 select * from server.dbo.tablename 

Alle gespeicherten Prozeduren greifen auf entfernte Tabellen über die viewen zu, anstatt direkt, dh für den Zugriff auf eine Person-Tabelle im entfernten database-Anruf Personal wäre:

 create view vw_STAFF_Person as select * from Staff.dbo.Person go create procedure stp_Select_Staff as select * from vw_Staff_Person go 

eher, als

 create procedure stp_Select_Staff as select * from Staff.dbo.Person go 

Die Begründung dafür ist, dass, wenn Sie Ihre database testing möchten, werden Sie wahrscheinlich wollen, um alle Remote-databaseen zu Ihrem 'Test' Remote-databaseen neu zu verknüpfen. Dies ist in der Regel einfacher zu tun, wenn die einzigen objecte, die auf entfernte data zugreifen, einfache viewen sind, anstatt die oft zahlreicheren und komplexeren gespeicherten Prozeduren.

Ich habe in der Regel einen Job eingerichtet, dass die viewen auf die "Test" -databaseen umkehren können, also wird es automatisch durchgeführt.

Darüber hinaus habe ich auch oft einen Job eingerichtet, der Produktionsdatenbank-Backups in die 'Test' Umgebung wiederherstellt, so dass das Testen vor der Bereitstellung gegen Systeme erfolgen kann, die eine Kopie von Live-data enthalten. Wieder wird dieser Vorgang erleichtert, nur um die viewen neu zu verknüpfen, anstatt alle gespeicherten Proc-referenceen auf entfernte Systeme.

Um das Testen gegen die security zu erleichtern, stelle ich auch immer die databasesicherheit auf der Ebene der databaserollen und nicht auf bestimmte Benutzer ein, da ich roles mehr tragbar über Produktions-, Test- und Entwicklungsumgebungen als users finde.

Hoffe, dass einige dieser Tipps helfen.