2012-09-13 5 views

Antwort

5

Kurz gesagt, können Sie nicht. Deshalb sollte jeder Aufruf zu solch einem "Dienst" hinter einer Abstraktion verborgen sein.

Sie können ein Beispiel davon in der Standard-MVC-Vorlage sehen.

+1

Können Sie es ausarbeiten? Die Vorlage verwendet WebSecurity.Login(). Was ist eine gute Möglichkeit, das zu abstrahieren, damit die Komponententests nicht wirklich auf die Datenbank treffen? – GWTF

+2

Gefunden, die vielversprechend aussieht: http://blog.spontaneouspublicity.com/unit-testing-the-mvc4-account-controller. Ist das die Art von Abstraktion, von der du sprichst? – GWTF

+0

@Scott Link unterbrochen. –

3

Ja, wie Serg sagte, können Sie dies verspotten, indem Sie eine Schnittstelle für den echten Dienst zur Verfügung stellen. Diese Schnittstelle würde die öffentlichen Methoden haben Sie anrufen, wie zum Beispiel:

public interface IMyServiceInterface 
{ 
    IMembershipUser GetUser(); 
    // other methods you want to use... 
} 

In Komponententests, würden Sie sagen:

var mockService = new Mock<IServiceInterface>(); 
mockService.Setup(mock => mock.GetUser()). 
    Returns(new MembershipUserImplementation("MyTestUser", otherCtorParams)); 

In meinem Beispiel habe ich einen Wrapper für MembershipUser schaffen würde sowie es scheint, als müsste es auch hinter einer Abstraktion stehen.

+0

Welchen spöttischen Rahmen benutzen Sie im Beispiel? –

+0

Ich benutze [Moq] (http://code.google.com/p/moq/). Es ist einfach und macht alles, was ich brauche. – sfogle

Verwandte Themen