Moq - Wie die Rückkehr der eine verspottet Objekt von einer Methode?
Ich bin neu auf Moq und möchten nicht nur unit-tests, wo ich mich meistens kommen Sie aber im code.
Angesichts dieser Entität:
namespace TestBed.Domain.Entities
{
public class Person
{
public string LastName { get; set; }
public string FirstName { get; set; }
public string PhoneNumber { get; set; }
public string JobTitle { get; set; }
}
}
und diese abstrakten Repository:
using TestBed.Domain.Entities;
namespace TestBed.Domain.Abstract
{
public interface IPersonRepository
{
Person GetPerson();
}
}
Ich will Moq füllen Sie einen dummy-person (!) und pass bevölkert "Objekt" aus der Repository-Methode. Wie mache ich das?
using TestBed.Domain.Abstract;
using TestBed.Domain.Entities;
using Moq;
namespace TestBed.Domain.Concrete
{
public class MockPersonReqpository
{
Person GetPerson()
{
Mock<IPersonRepository> mock = new Mock<IPersonRepository>();
mock.Setup(m => m.GetPerson()).Returns(new Person()
{
FirstName = "Joe",
LastName = "Smith",
PhoneNumber = "555-555-5555"
});
return mock.Object //NO
}
}
}
InformationsquelleAutor Sam Gentile | 2011-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
mock.Object gibt eine mock-Typ IPersonRepository. Der Rückgabetyp für die GetPerson () - Methode erwartet ein Objekt vom Typ Person.
Die andere Sache ist, dass Sie nicht die Schaffung eines mock für die Person, also ich sehe nicht den Sinn von diesem code. Ich bin mir nicht sicher, was du meinst von dummy aber Sie könnte genauso gut tun Sie dies:
Wie ich es sehe Moq ist ein Hilfsmittel für die Prüfung, es verspottet entfernt alle Abhängigkeiten, so dass Sie testen können, die Logik des Codes im test. Sie können alles tun, Moq nicht manuell (mocks und stubs), Moq macht es nur leichter. Ein mock ist ein Weg, zu behaupten, wenn Sie das Objekt unter test interagiert hat wie erwartet mit der Attrappe. In Ihrem Fall, den Sie gerade erstellen möchten eine Person mit einigen fake-Daten, wenn ich Sie richtig verstehe? Sie brauchen keine Moq. Erstellen Sie einfach eine FakePersonRepository, dass gibt eine Person mit einigen fake-Daten.
Ok< ich verstehe.
InformationsquelleAutor Daniel Lee
Aus deinem Kommentar auf @Daniel die Antwort, wie es scheint, brauchen Sie nur zu verhöhnen, als das repository selbst. Würden Sie immer noch wollen, um wieder eine richtige
Person
Objekt, Sie nur nicht, wie das repository ist tatsächlich abrufen der person für die Zwecke des Tests.Ich versteh auch nicht, Ihren Kommentar über die Verwendung von Moq in anderen Orten neben unit-tests. Der ganze Punkt Moq ist, so dass Sie gefälschte ein Tatsächliches Objekt für Testzwecke (wohl besser gesagt als das, aber das ist der Kern).
Da ich nicht weiß, was du versuchst zu testen, genau, ich Geb ein triviales Beispiel:
var mock = new Mock<T>()
produziert den gleichen sich geben alsvar mock = new Mock<T>.Setup()
. Aber es funktioniert nicht. So, ich sollte nicht versucht haben, versuchen Sie zu konstruieren und zu manipulieren, in den gleichen Ruf.InformationsquelleAutor Andrew Whitaker