Nunit-Tests mit Mock. Instanz Interface

Habe ich die folgenden (vereinfachten) code.

public class Controller
{
     private readonly IService _service;

     public Controller(IService service)
     {
         _service = service;
     }

     public async Task<IHttpActionResult> Create(MyObject object)
     {
         var result = _service.method(object);
         if (!result.Succeeded)
         {
            return this.GetErrorResult(object);
         }
     }
}

und SimpleInjector wird verwendet, um zu injizieren, die Abhängigkeit zwischen _service und deren Umsetzung-Klasse wie folgt:

public static void Register(Container container)
{
    container.Register<IService, Service>();
}

Als Hinweis, injection und unit testing sind für mich neu, damit ich nicht ganz verstehen, aber versuche es zu lernen.

Wenn ich die Anwendung ausführen durch Stolzieren, alles ist in Ordnung.

Als Hinweis, die Register Funktion wird aufgerufen, wenn ich die Anwendung ausführen, durch Angeberei.

Nun, ich bin versucht, setup einige unit-tests mit NUnit, und bin Verspotten die IService-Objekt wie folgt:

var Service = new Mock<IService>();
Controller _controller = new Controller(Service.Object);
_controller.Create(new MyObject object());

die korrekt zu sein scheint mir so weit - ich bin zwar nicht sicher?

Das problem ist, dass für den unit-test, result immer null ist - ich denke, das ist, weil es ein problem mit meinem Mock von der interface - scheint es nicht zu sein, finden die Methode - es tritt niemals in ihn, und nicht zeigen, bis int er-debugger.

Als Hinweis, für den unit-test, der Register Methode nicht aufgerufen. Ich habe versucht, nannte es registrieren die Abhängigkeit, aber es hilft nicht.

Wie ich oben sagte, dies ist alles neu für mich und ich bin am Rande meines Verständnisses auf.

Ich bin aus Ideen, und wissen nicht, wohin Sie schauen von hier aus, so dass jede Hilfe wäre sehr geschätzt werden.

EDIT:

Die ursprüngliche Frage war die folgende:

public async Task<IHttpActionResult> Create(string content)

welche ich aktualisiert habe:

public async Task<IHttpActionResult> Create(MyObject object)

Kann mir jemand beraten, wie ich kann in einen generischen Verweis auf MyObject auf das setup, ohne eine Instanz dieser Klasse.

Also grundsätzlich will ich sagen, dass es eine Instanz dieser Klasse übergeben werden, ohne dass diese Instanz.

Ich habe versucht, die folgenden:

Service.Setup(x => x.method(It.IsAny<MyObject>())

but it says cannot convert MethodGroup to MyObject

und hier ist die definition von IService:

public interface IService
{
      IdentityResult method(ApplicationUser user, UserLoginInfo login);
}
Recht. Sie müssen, um den setup-mock zu tun, was Sie wollen, es zu tun für den test. Check-out quick-start here github.com/Moq/moq4/wiki/Quickstart
Hast du ein Schein-Setup auf dem mock-Objekt?
Möglicherweise müssen Sie Graben das vereinfachte Beispiel und Fragen, was genau Sie brauchen. Denn wir sind nur gehen, um Links zu raten. Sieht aus wie Sie arbeiten Asp.Net Identitäts-Rahmen, der ist breit. also bitte schmalen bis zu Besonderheiten
Sie werden nicht sehen Sie Ihre unit-tests schlagen Ihre Register Methode, weil die tests nicht ausführen, die code, die Sie testen Sie Ihre Klasse Unter Test in isolation. Und das ist eine gute Sache: Sie verwenden nicht einen DI-container, während unit-Tests.

InformationsquelleAutor Alex | 2017-01-12

Schreibe einen Kommentar