Ich habe versucht, AutoMoqCustomization
zu verwenden, um ein Objektdiagramm mit verschachtelten Abhängigkeiten automatisch nachzuahmen, und die Ergebnisse sind nicht so, wie ich es erwartet hatte. Hier ist der Testcode, kann mir bitte jemand sagen, warum es nach dem Einfrieren eines Mock<IObject>
eine Situation gibt, in der ein weiteres IObject
das von Moq erstellt wurde, vom Fixture erstellt wird?
[TestClass]
public class MyTestClass
{
[TestMethod]
public void Test()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var objMock = fixture.Freeze<Mock<IObject>>();
var sut = fixture.Create<Dependant2>();
sut.Obj.Should().BeSameAs(objMock);
}
}
public interface IObject { }
public interface IDependant { IObject Obj { get; } }
public class MyObject : IObject { }
public class Dependant2
{
public Dependant2(IDependant dependant)
{
Obj = dependant.Obj;
}
public IObject Obj { get; }
}
AutoMoqCustomization
erstellt Scheinobjekte, richtet sie aber nicht ein.
Wenn Sie möchten, dass die Mitglieder des Mocks eingerichtet werden, sollten Sie stattdessen AutoConfiguredMoqCustomization
verwenden. Es wird a) die öffentlich einstellbaren Eigenschaften des Mocks einstellen und b) Methoden/Indexer einrichten, um Werte zurückzugeben (und zu speichern), die vom Gerät träge generiert wurden
Es gibt zwei Einschränkungen. Es wird nicht eingerichtet:
ref
ParameternWeitere Informationen am Ende des Spickzettels .
Danke für schnelle Antwort! Ich habe AutoConfiguredMoqCustomization
mit Methode anstelle von Eigenschaft in IDependant
ausprobiert und die eingefrorene Instanz respektiert. Gibt es eine Möglichkeit, auch nicht einstellbare Eigenschaften zu respektieren? Mit Moq kann man einen Property Getter einrichten, auch wenn kein Setter vorhanden ist.
Eigentlich egal. Es richtet auch Get-Only-Eigenschaften ein, mein Fehler.
Ich erinnere mich auch an einen Fehler in Moq, der AutoMoq störte, wodurch es nicht möglich war, Nur-Get-Eigenschaften einzurichten. Als ich mir das ansah, musste man zumindest die Moq-Version 4.2.1409.1722 oder niedriger verwenden (Details unter #434). Vielleicht wurde der Fehler in neueren Versionen von Moq behoben, ich bin mir nicht sicher.
Ich habe die höchste Moq-Version ausprobiert, die niedriger als 4.2.1409.1722 ist, und Sie haben Recht, sie funktioniert auch für Nur-Get-Eigenschaften. Der Moq-Bug wurde in einer neueren Version nicht behoben, da ich es mit der neuesten versucht habe. Vielen Dank für Ihre Hilfe
Hilfreichster Kommentar
AutoMoqCustomization
erstellt Scheinobjekte, richtet sie aber nicht ein.Wenn Sie möchten, dass die Mitglieder des Mocks eingerichtet werden, sollten Sie stattdessen
AutoConfiguredMoqCustomization
verwenden. Es wird a) die öffentlich einstellbaren Eigenschaften des Mocks einstellen und b) Methoden/Indexer einrichten, um Werte zurückzugeben (und zu speichern), die vom Gerät träge generiert wurdenEs gibt zwei Einschränkungen. Es wird nicht eingerichtet:
ref
ParameternWeitere Informationen am Ende des Spickzettels .