Moq Einstellung Rückgabewert der Methode
Habe ich die unten Klasse, und ich versuche, die Methode zu testen AddRecordToQueue.
Ich bin mit Moq, zu verhöhnen, das Ergebnis der die AddToQueue Methode innerhalb der AddRecordToQueue Methode.
Den AddToQueue-Methode gibt einen booleschen Wert zurück, so dass ich versucht bin, zu verspotten, das Ergebnis mit dem wahren Wert
public class Test
{
private readonly IRabbitMqConnection rabbitMqConnection;
public Test(IRabbitMqConnection rabbitMqConnection)
{
this.rabbitMqConnection = rabbitMqConnection;
}
public bool AddRecordToQueue(string messageExchange, object data)
{
var jsonified = JsonConvert.SerializeObject(data);
var customerBuffer = Encoding.UTF8.GetBytes(jsonified);
var result = this.rabbitMqConnection.AddToQueue(customerBuffer, messageExchange);
return result;
}
}
Meine test-Klasse sieht aus wie die unten.
[TestClass]
public class TestCon
{
[TestMethod]
public void MockTest()
{
Moq.Mock<IRabbitMqConnection> rabbitConection = new Moq.Mock<IRabbitMqConnection>();
var draftContactsManager = new Test(rabbitConection.Object);
rabbitConection.Setup(e => e.AddToQueue(null, string.Empty)).Returns((bool res) => true);
var result = draftContactsManager.AddRecordToQueue("someExchange", null);
Assert.IsTrue(result);
}
}
Ich kann nicht scheinen, um die moq Ergebnis als zutreffend. Kann mir jemand raten, was ich bin fehlt
Dank
Nicht auf eine Maschine zum testen, aber es gibt zwei Dinge, die ich hier sehe. 1. Sollten Sie
Tatsächlich, Sie nicht tun, Setup, bevor man das Objekt
Setup
bevor Sie einen Verweis auf die .Object
; 2. In Setup
legen Sie die Argumente auf null und leer ist, versuchen Sie es mit Setup(e => e.AddToQueue(It.IsAny(), Is.IsAny())).Returns(true))
Tatsächlich, Sie nicht tun, Setup, bevor man das Objekt
InformationsquelleAutor simon1230756 | 2015-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass müssen Sie ändern die
Returns
nur true zurückgeben, anstelle des lambda-Ausdrucks. Wie diese:EDIT:
Wenn dies immer noch nicht funktioniert, dann ist es wahrscheinlich aufgrund der Parameter, die nicht zusammenpassen. Sie sind vorbei, in
"someExchange"
aber die verspotten, die für die Zeichenfolge.Leer. Wenn Sie nicht sicher sind, welche Werte verwendet werden, könnten Sie dieIt.IsAny
Methode, dies zu umgehen.Ich habe aktualisiert die Antwort.
Nice one. Dank bro.
Stellen Sie sicher, dass Sie in Ihrem setup Sie sind, Es zu benutzen.IsAny für alle Parameter und nicht einige test-variable, die Sie arrangiert.
InformationsquelleAutor TomDoesCode
Müssen Sie, um den setup-Methode mit der tatsächlichen Argumenten es aufgerufen wird.
Wenn
JsonConvert.SerializeObject(data)
gibt null zurück, dann ist dies das setup:Darüber hinaus können Sie die Einstellungen der Methode return true/false, unabhängig von den Werten der Argumente:
Mit dem obigen setup, die Methode zurück
true
egal was, was Sie sich schon an die Methode übergeben. Das Vorherige Beispiel wird true zurückgegeben, nur wenn die Methode aufgerufen wird, mit der setuped Argumente.InformationsquelleAutor Dimitar Tsonev
Setup
vor mit der dazugehörigenObject
Es sollte etwas sein, das ähnlich:
Warum diese Antwort hat +1 Stimme wenn es komplett falsch?
InformationsquelleAutor Eris