Saya sudah mencoba menggunakan AutoMoqCustomization
untuk secara otomatis mengejek grafik objek dengan dependensi bersarang dan hasilnya tidak seperti yang saya harapkan. Berikut kode pengujiannya, dapatkah seseorang memberi tahu saya mengapa setelah membekukan Mock<IObject>
ada situasi di mana IObject
dibuat oleh Moq dibuat oleh perlengkapan?
[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
membuat objek tiruan tetapi tidak mengaturnya.
Jika Anda ingin anggota tiruan diatur, pertimbangkan untuk menggunakan AutoConfiguredMoqCustomization
sebagai gantinya. Ini akan a) mengatur properti mock's settable publik dan b) metode penyiapan/pengindeks untuk mengembalikan (dan memoize) nilai yang dihasilkan dengan malas oleh fixture
Ada dua batasan. Itu tidak mengatur:
ref
Info lebih lanjut di bagian bawah lembar contekan .
Terima kasih untuk respon cepat! Saya mencoba AutoConfiguredMoqCustomization
dengan metode alih-alih properti di IDependant
dan itu menghormati instance yang dibekukan. Apakah ada cara untuk membuat properti yang tidak dapat disetel agar dihormati juga? Dengan Moq, seseorang dapat mengatur pengambil properti bahkan ketika tidak ada penyetel.
Sebenarnya, tidak apa-apa. Itu juga mengatur properti get-only, ya ampun.
Saya juga ingat bug di Moq yang mengganggu AutoMoq, membuatnya tidak dapat mengatur properti get-only. Setidaknya ketika saya melihat ini, Anda harus menggunakan Moq versi 4.2.1409.1722 atau lebih rendah (detail di #434). Mungkin bug telah diperbaiki di versi Moq yang lebih baru, saya tidak yakin.
Mencoba versi Moq tertinggi yang lebih rendah dari 4.2.1409.1722 dan Anda benar, ini juga berfungsi untuk properti get-only. Bug Moq tidak diperbaiki di versi yang lebih baru, karena saya mencobanya dengan yang terbaru. Terima kasih banyak atas bantuan Anda
Komentar yang paling membantu
AutoMoqCustomization
membuat objek tiruan tetapi tidak mengaturnya.Jika Anda ingin anggota tiruan diatur, pertimbangkan untuk menggunakan
AutoConfiguredMoqCustomization
sebagai gantinya. Ini akan a) mengatur properti mock's settable publik dan b) metode penyiapan/pengindeks untuk mengembalikan (dan memoize) nilai yang dihasilkan dengan malas oleh fixtureAda dua batasan. Itu tidak mengatur:
ref
Info lebih lanjut di bagian bawah lembar contekan .