Teilweise Spott der Klasse mit Moq
Ich will, zu verhöhnen, nur die GetValue
- Methode der folgenden Klasse, mit Moq:
public class MyClass
{
public virtual void MyMethod()
{
int value = GetValue();
Console.WriteLine("ORIGINAL MyMethod: " + value);
}
internal virtual int GetValue()
{
Console.WriteLine("ORIGINAL GetValue");
return 10;
}
}
Ich schon ein wenig gelesen, wie das funktionieren sollte mit Moq. Die Lösung, die ich online gefunden, ist die Verwendung der CallBase
Eigenschaft, aber das funktioniert nicht für mich.
Dies ist mein test:
[Test]
public void TestMyClass()
{
var my = new Mock<MyClass> { CallBase = true };
my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999);
my.Object.MyMethod();
my.VerifyAll();
}
Ich würde erwarten, dass Moq nutzt die vorhandene Implementierung von MyMethod
und fordert die verspottet-Methode, was in der folgenden Ausgabe:
ORIGINAL MyMethod: 999
MOCKED GetValue
aber das ist, was ich bekomme :
ORIGINAL GetValue
ORIGINAL MyMethod: 10
dann
Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()
Bekam ich das Gefühl, dass ich etwas völlig missverstanden. Was vermisse ich hier?
Jede Hilfe würde geschätzt
möglich, Duplikat der Wenn die Verspottung einer Klasse mit Moq, wie kann ich CallBase nur für spezielle Methoden?
Wenn Sie Ihre
mögliche Duplikate von Überprüfen, wurde eine Methode mit Namen
naja, es funktioniert wirklich, wenn ich eine änderung
Wenn Sie Ihre
GetValue
Methode public
statt internal
es funktioniert. Ich weiß nicht warum, vielleicht ist dies eine Einschränkung von castle dynamic proxy, oder ist es ein bug, ein Moq, oder dies ist das beabsichtigte Verhalten. Jedenfalls, wenn Sie verlassen es als interne können Sie nicht setzen Sie Ihre Produktions-code in einer anderen assembly, es sei denn, Sie verwenden InternalVisibleTo.mögliche Duplikate von Überprüfen, wurde eine Methode mit Namen
naja, es funktioniert wirklich, wenn ich eine änderung
GetValue
zu public
. Das ist eine echte Enttäuschung. Ich habe eine sehr komplexe Klasse verwendet, die eine private Methode zu schreiben, dessen Ergebnis in eine ascii-Datei. Ich wollte nur loswerden, dass die Datei, und überprüfen Sie die Zeichenfolge direkt in meine unit-test. Wie soll ich dies tun?InformationsquelleAutor Fabian | 2012-06-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
OK, ich fand die Antwort in einer anderen Frage: Wie zum Hohn die Interne Methode einer Klasse?. Das ist also eine doppelte und kann geschlossen werden.
Trotzdem, hier die Lösung:
fügen Sie einfach diese Zeile, um die
Assembly.config
des Projekts, das Sie testen möchten:Die Klasse, die getestet wird! Ich bearbeitet meine Antwort und verdeutlicht, dass bit.
InformationsquelleAutor Fabian
Haben Sie versucht, die angeben, Überprüfbaren:
InformationsquelleAutor Felice Pollano