Π― ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ AutoMoqCustomization
Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ Π³ΡΠ°ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ Π½Π΅ ΡΠ°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Ρ ΠΎΠΆΠΈΠ΄Π°Π». ΠΠΎΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄, ΠΌΠΎΠΆΠ΅Ρ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ½Π΅, ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΌΠΎΡΠ°ΠΆΠΈΠ²Π°Π½ΠΈΡ Mock<IObject>
Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄ΡΡΠ³ΠΎΠΉ IObject
ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Moq, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈΠ±ΠΎΡΠΎΠΌ?
[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
ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ Π½Π΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΈΡ
.
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΌΠ°ΠΊΠ΅ΡΠ° Π±ΡΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ AutoConfiguredMoqCustomization
. ΠΠ½ Π°) ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΠ°ΠΊΠ΅ΡΠ° ΠΈ Π±) ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ / ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° (ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π»Π΅Π½ΠΈΠ²ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΡΠΈΠ±ΠΎΡΠΎΠΌ.
ΠΡΡΡ Π΄Π²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ:
ref
ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π½ΠΈΠ·Ρ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΠΈ .
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π±ΡΡΡΡΡΠΉ ΠΎΡΠ²Π΅Ρ! Π― ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» AutoConfiguredMoqCustomization
Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² IDependant
ΠΈ ΠΎΠ½ ΡΠ²Π°ΠΆΠ°Π» Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ. ΠΡΡΡ Π»ΠΈ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ±Π»ΡΠ΄Π°Π»ΠΈΡΡ? Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Moq ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ², Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π·Π°Π±ΡΠ΄Ρ. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΌΠΎΠ΅ ΠΏΠ»ΠΎΡ ΠΎΠ΅.
Π― ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ½Ρ ΠΎΡΠΈΠ±ΠΊΡ Π² Moq, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠ΅ΡΠ°Π»Π° AutoMoq, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠ³ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Ρ ΠΈΠ·ΡΡΠ°Π» ΡΡΠΎ, Π²Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Moq Π²Π΅ΡΡΠΈΠΈ 4.2.1409.1722 ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ΅ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π² # 434). ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡΠΈΠ±ΠΊΠ° Π±ΡΠ»Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ² Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Moq, Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½.
ΠΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠ°ΠΌΡΡ Π²ΡΡΠΎΠΊΡΡ Π²Π΅ΡΡΠΈΡ Moq, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΠΆΠ΅ 4.2.1409.1722, ΠΈ Π²Ρ ΠΏΡΠ°Π²Ρ, ΠΎΠ½Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠ±ΠΊΠ° Moq Π½Π΅ Π±ΡΠ»Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ² Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π΅Π΅ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ. ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΠ°ΡΡ ΠΏΠΎΠΌΠΎΡΡ
ΠΡΠ±Π»ΠΈΠΊΠ°ΡΡ http://stackoverflow.com/q/36656741/126014
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
AutoMoqCustomization
ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΈΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π½ΠΎ Π½Π΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΈΡ .ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΈ ΠΌΠ°ΠΊΠ΅ΡΠ° Π±ΡΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ
AutoConfiguredMoqCustomization
. ΠΠ½ Π°) ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΠ°ΠΊΠ΅ΡΠ° ΠΈ Π±) ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ / ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΎΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° (ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π»Π΅Π½ΠΈΠ²ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠ±ΠΎΡΠΎΠΌ.ΠΡΡΡ Π΄Π²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ:
ref
ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π½ΠΈΠ·Ρ ΡΠΏΠ°ΡΠ³Π°Π»ΠΊΠΈ .