Es ist möglich konkrete Klassen zu verspotten
[TestClass]
public class PlaceholderParserFixture
{
public class Foo
{
public virtual int GetValue()
{
return 11;
}
}
public class Bar
{
private readonly Foo _foo;
public Bar(Foo foo)
{
_foo = foo;
}
public int GetValue()
{
return _foo.GetValue();
}
}
[TestMethod]
public void MyTestMethod()
{
var foo = new Mock<Foo>();
foo.Setup(mk => mk.GetValue()).Returns(16);
var bar = new Bar(foo.Object);
Assert.AreEqual(16, bar.GetValue());
}
}
aber
- Es muss eine öffentliche Klasse sein
- Verfahren verspottet werden muss virtuell sein
Die Nachricht s Ich habe für:
der Klasse Intern
Castle.DynamicProxy.Generators.GeneratorException: Typ MoqFixture + Foo nicht öffentlich ist. Proxy für Typen, auf die nicht zugegriffen werden kann, kann nicht erstellt werden.
oder einer nicht-virtuelle Methode mit
System.NotSupportedException: Ungültige-Einrichtung auf einem nicht-virtuell (überschreibbar in VB) Mitglied: mk => mk.GetValue()
stimmen nicht mit Ihrer cannot instantiate
Nachricht überein, so scheint etwas anderes falsch zu sein.
Wenn Sie nicht über einen Standard-Konstruktor auf dem verspotteten Objekt haben, können Sie diese Fehlermeldung erhalten
z.B.
public class Foo
{
private int _value;
public Foo(int value)
{
_value = value;
}
public virtual int GetValue()
{
return _value;
}
}
kann man dies umgehen, indem Werte in die Mock <> Ctor
zum Beispiel vorbei
var foo = new Mock<Foo>(MockBehavior.Strict, new object[] { 11 });
Es gibt wahrscheinlich mehr zu der Fehlermeldung, die erklärt, warum Moq den Proxy nicht erstellen kann. Wenn Sie die Klassendefinition (zumindest die Konstruktoren) zusammen mit dem Testcode, der moq verwendet, einschließen, erhalten Sie wahrscheinlich eine Antwort. – PatrickSteele
Mögliches Duplikat von [Wie man eine Klasse ohne Interface und keine virtuellen Methoden in C# vortäuscht?] (Http://stackoverflow.com/questions/39356771/how-to-mock-a-class-with-no-interface-) und-no-virtual-methods-in-c) –
Zeigen Sie ein Beispiel für die Klasse. es sei denn, die Klasse ist versiegelt oder hat keine virtuellen Methoden oder Eigenschaften, dann sollte es in der Lage sein, verspottet zu werden. – Nkosi