[TestFixture]
public class TestAutoFixture4
{
[Test]
[AutoMoqData]
public void CreatingAnDummyObjectShouldNotThrow(IFixture fixture)
{
fixture.Invoking(x => x.Create<DummyObject>()).ShouldNotThrow();
}
[Test]
[AutoMoqData]
public void BuildingAnDummyObjectShouldNotThrow(IFixture fixture)
{
fixture.Invoking(x => x.Build<DummyObject>().Create()).ShouldNotThrow();
}
}
public class DummyObject
{
public Guid Id { get; set; }
public DummyObject CircularRef { get; set; }
}
public class AutoMoqDataAttribute : AutoDataAttribute
{
public AutoMoqDataAttribute()
: base(new Fixture()
.Customize(
new DummyCustomization()
))
{ }
}
public class DummyCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<DummyObject>(c =>
c.Without(x => x.CircularRef)
);
}
}
AutoFixtureλ₯Ό 3.50.6μμ 4.0.0μΌλ‘ μ λ°μ΄νΈνμ΅λλ€.
μμ μ½λλ 3.50.6μμ μλ²½νκ² μλνμ§λ§ 첫 λ²μ§Έ ν μ€νΈ(fixture.Create μ¬μ©)λ§ 4.0.0(.NET 4.6.2, NUnit3.7.1, FluentAssertions 4.19.4)μ μ¬μ©νμ¬ ν΅κ³Όν©λλ€.
μ£Όμ λ μ¬μ©μ μ§μ μ΄ μν μ°Έμ‘°λ₯Ό νμΈνμ§ μλλ‘ μ§μ νλλΌλ fixture.Buildλ₯Ό μ¬μ©νλ ν μ€νΈλ μ€ν¨ν©λλ€.
λ³κ²½ λ‘κ·Έμμ λλ½λ κ²μ΄ μμ΅λκΉ μλλ©΄ λ²κ·Έμ λκΉ?
미리 κ°μ¬λ립λλ€ :)
@Dev-I-Ant μ¬κΈ°μ λ¬Έμ λ₯Ό κ²μνκ³ μμΈν μ€λͺ μ ν΄μ£Όμ μ κ°μ¬ν©λλ€ π
μ΄ λμμ #781μ μ μ©λ λ³κ²½ μ¬νμ κ²°κ³Όμ λλ€. νλμ μ¬μ©μ μ§μ μ΄ λ€λ₯Έ μ¬μ©μ μ§μ μ μν₯μ μ€ μ μλ λ¬Έμ λ₯Ό μμ νμ΅λλ€. μ΄λ λμΌν μ νμ λν΄ λ κ°μ νμ μ¬μ©μ μ μκ° μλ κ²½μ°μλ λ°μν©λλ€. μ΄μ μ¬μ©μ μ μλ μμ ν 무μλ©λλ€.
Build<T>()
APIλ₯Ό μ¬μ©νλ©΄ μ€μ λ‘ DummyObject
μ νμ λν μμ μ¬μ©μ μ§μ μ μμ±νλ κ²μ
λλ€. μ¦, μ΄μ μ λͺ¨λ μ¬μ©μ μ μ( Customize<DummyObject>()
APIλ₯Ό ν΅ν΄ μ μ©λ¨)κ° λ¬΄μλκ³ μ°Έμ¬νμ§ μμ΅λλ€. μ΄κ²μ΄ μν μ’
μμ±μ λν μ€λ₯κ° λ€μ νμλλ μ΄μ μ
λλ€.
μ΄λ¬ν μ’ λ₯μ κ²©λ¦¬κ° νμν©λλ€. κ·Έλ μ§ μμΌλ©΄ λ§€μ° μ΄μν λ¬Έμ κ° λ°μν μ μμ΅λλ€(μμ μΈκΈλ PRμμ μ°Έμ‘°λ λ¬Έμ μ°Έμ‘°). λ°λΌμ μΌμ λ¨μνκ² μ μ§νκΈ° μν΄ κ΄μ°°λ λμμ λ²κ·Έκ° μλλΌ νμ¬ κ°μ§κ³ μλ λμμΈμ νΉμμ±μ΄λΌκ³ λ§νκ³ μΆμ΅λλ€.
κ΄μ°°ν λ¬Έμ λ₯Ό μννκΈ° μν΄ κΈ°λ³Έμ μΌλ‘ λ κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
Omitter
μΆκ°μ°λ¦¬λ μ΄λ―Έ λΉμ·ν μ§λ¬Έμ λ°μμΌλ―λ‘ μ¬κΈ°μ μ μλ μ κ·Ό λ°©μμ μ¬μ¬μ©νκ±°λ νμμ λ μ λ§λλ‘ λ³κ²½ν μ μμ΅λλ€. λΆλͺ ν μ΄κ²μ΄ νλ‘μ νΈμ μΌλ°μ μΈ μλ리μ€λΌλ©΄ νμ₯ λ©μλλ₯Ό λ§λ€μ΄ μμ μ λ μ½κ² μνν μ μμ΅λλ€.
Create<T>()
API μ¬μ©μνμμλ Build<>
APIλ₯Ό μ¬μ©ν νμκ° μμ΅λλ€. λ¬Όλ‘ λ¨μνλ μνμ μ 곡νκ³ μ€μ λ‘ ν΄λΉ APIκ° νμν μλ μμ΅λλ€. κ·Έλ¬λ λ§μΌμ λλΉνμ¬ μ΄ μ΅μ
μ μ 곡νκΈ°λ‘ κ²°μ νμ΅λλ€ π
λ΄ λ΅λ³μ΄ μ΄ λ¬Έμ μ λν μ 보λ₯Ό μ 곡νλ λ° λμμ΄ λμλμ§ μλ €μ£ΌμΈμ π
@zvirja ν΅μ°°λ ₯ μ£Όμ μ κ°μ¬ν©λλ€. μ΄κ²μ μν©μ λ λͺ ννκ² λ§λλλ€.
λλ μ΄λ―Έ κ°μ μ νμ μ¬μ©μ μ μλ₯Ό μλ κ²μ΄ λΆκ°λ₯νλ€λ μ¬μ€μ λν΄ λ§μ΄ μ½μκ³ (λΉλ‘ μ€λ§μ€λ½λλΌλ) μ΄ λ³κ²½μΌλ‘ μΈν΄ νμ€ν μ½κ°μ λ¬Έμ κ° λ°μνμ§λ§ μ 무μΈκ°λ₯Ό λ³κ²½ν΄μΌ νλμ§ μ΄ν΄ν©λλ€.
λ΄ μ¬μ© μ¬λ‘λ λ§μ μν μ°Έμ‘°κ° μλ ν° κ°μ²΄ κ·Έλνλ₯Ό μ¬μ©νμ¬ μμ© νλ‘κ·Έλ¨μ ν μ€νΈνλ κ²μ λλ€. λΆλͺ¨κ° μμ λͺ©λ‘μ 보μ νκ³ μ°¨λ‘λ‘ λΆλͺ¨λ₯Ό μ°Έμ‘°νλ μ νμ μΈ (λ°?) ν¨ν΄μ λλ€.
λͺ¨λΈμ λ³κ²½νκ³ μΆμ§λ§ νμ¬λ‘μλ λΆκ°λ₯ν©λλ€.
λ°λΌμ λ¨μν fixture.Createλ₯Ό μ¬μ©νμ¬ κ°μ²΄λ₯Ό μμ±νλ κ²μ μ΅μ μ΄ μλλ©° μΌλ°μ μΌλ‘ μ§νμ OmitAllPropertiesλ₯Ό νΈμΆνμ¬ κ°μ²΄λ₯Ό λΉλνλ―λ‘ AFμ μ±λ₯μ΄ μ νλ©λλ€.
κ·Έλμ μ λ μν μ°Έμ‘°λ₯Ό μλ΅νκ³ μ΄λ₯Ό μ²λ¦¬νλ λͺ κ°μ§ μ¬μ©μ μ μλ₯Ό λ§λ€κ³€ νμ΅λλ€(κ·Έλ° λ€μ κ°λ°μλ μν μ°Έμ‘°κ° μλμ§ μ¬λΆμ μ κ²½μ°μ§ μκ³ κ°μ²΄λ₯Ό λΉλνκ³ Withλ₯Ό μ¬μ©νμ¬ μΆκ°λ‘ μ¬μ©μ μ μν μ μμ΄μΌ νμ΅λλ€. μμ΄ λ±λ±). κ·Έλ¬λ μ΄λ¬ν λ³νλ μ΄ λͺ¨λ κ²μ κΉ¨λ¨λ¦½λλ€.
Omitter μ κ·Ό λ°©μμ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€κ³ μκ°νμλκΉ? λλ μ΄ μμ
μ λͺ°λκ³ μ΄μ¨λ νμ€ν μλν κ²μ
λλ€.
λ€μ ν λ² κ°μ¬λ리며, μ μκ°μ μΆκ°ν μ μλ λ΄μ©μ΄ μμΌλ©΄ μλ €μ£ΌμΈμ.
Omitter μ κ·Ό λ°©μμ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€κ³ μκ°νμλκΉ? λλ μ΄ μμ μ λͺ°λκ³ μ΄μ¨λ νμ€ν μλν κ²μ λλ€.
λ€μκ³Ό κ°μ΄ μ¬μ©μ μ μλ₯Ό λ€μ μμ±νλ©΄ λͺ¨λ ν μ€νΈκ° ν΅κ³ΌνκΈ° μμν©λλ€.
c#
public class DummyCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
// Don't populate the DummyObject.CircularRef property.
fixture.Customizations.Add(
new Omitter(
new EqualRequestSpecification(
typeof(DummyObject).GetProperty(nameof(DummyObject.CircularRef)))));
}
}
λ°λΌμ λ€, λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν©λλ€ π λν μ΄ μ κ·Ό λ°©μμ λ무 볡μ‘ν΄ λ³΄μ΄μ§ μμΌλ―λ‘ μμ© κ°λ₯ν΄μΌ ν©λλ€.
μ§λ¬Έμ λν΄ μΆκ° μ§λ¬Έμ΄ μμΌλ©΄ μλ €μ£ΌμΈμ.
μ΄κ²μ μλ²½νκ² μλν©λλ€. μ λ§ κ°μ¬ν©λλ€! λ«μΌμλ©΄ λ κ² κ°μμ :)
@Dev-I-Ant Awesome, νΌλλ°± μ£Όμ μ κ°μ¬ν©λλ€! :)
κ°μ₯ μ μ©ν λκΈ
λ€μκ³Ό κ°μ΄ μ¬μ©μ μ μλ₯Ό λ€μ μμ±νλ©΄ λͺ¨λ ν μ€νΈκ° ν΅κ³ΌνκΈ° μμν©λλ€.
c# public class DummyCustomization : ICustomization { public void Customize(IFixture fixture) { // Don't populate the DummyObject.CircularRef property. fixture.Customizations.Add( new Omitter( new EqualRequestSpecification( typeof(DummyObject).GetProperty(nameof(DummyObject.CircularRef))))); } }
λ°λΌμ λ€, λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν©λλ€ π λν μ΄ μ κ·Ό λ°©μμ λ무 볡μ‘ν΄ λ³΄μ΄μ§ μμΌλ―λ‘ μμ© κ°λ₯ν΄μΌ ν©λλ€.
μ§λ¬Έμ λν΄ μΆκ° μ§λ¬Έμ΄ μμΌλ©΄ μλ €μ£ΌμΈμ.