μλ νμΈμ,
```C#
[ν
μ€νΈν½μ€μ²]
κ³΅κ° ν΄λμ€ TestAutoFixture {
public class TestClass
{
public string Property { get; set; }
}
[Test]
public void Test()
{
var f = new Fixture();
f.Customize<TestClass>(composer => composer.FromFactory(() => new TestClass { Property = "foobar" }));
var o = f.Create<TestClass>();
Assert.That(o.Property, Is.EqualTo("foobar"));
}
}
```
μ΄ ν
μ€νΈλ .NET Core 2μμ 4.0.0-rc1μ μ¬μ©νμ¬ μ€ν¨ν©λλ€.
λλ μ΄κ²μ΄ μ€ν΄μ μμ§κ° μκ±°λ (λλ ββλ¬Έμνλμ§ μμ) μμ λμλ€κ³ μκ°ν©λλ€.
νΈμ§ : κΉ¨μ§μ§ μμμ΅λλ€. μλ μ£Όμμ μ°Έμ‘°νμμμ€.
FromFactory
λ©μλ λ€μ .Without(_ => _.Property)
μΆκ°νλ©΄ μλν λλ‘ μλνλ€λ κ²μ μμμ΅λλ€.
λλ μ΄κ²μ΄ λ§€μ° μ§κ΄μ μ΄μ§ μλ€κ³ μκ°νμ§λ§ λ²κ·Έκ° μλκΈ° λλ¬Έμ μ΄κ²μ λ«μ μ μμ΅λλ€.
λ¬Έμμ λ¬Έμ κ° μμ μ μμ΅λλ€ βΊοΈ
κΈ°λ³Έμ μΌλ‘ AutoFixtureλ fixture.OmitAutoProperties = true
λ₯Ό μ€μ νμ¬ ν΄λΉ λμμ λΉνμ±ννμ§ μλ ν κ³΅κ° setterλ‘ μμ±μ μλμΌλ‘ μ±μλλ€. composer.FromFactory()
λ©μλλ₯Ό μ¬μ©νλ©΄ νΉμ μ νμ μΈμ€ν΄μ€λ₯Ό νμ±ννλ λ°©λ²μ μ§μ ν μ μμ§λ§ λμ€μ ν΄λΉ κ°μ²΄μ λν μμ±μ΄ κ³μ ν λΉλ©λλ€.
μ€μ λ‘ μ μ ν AutoFixture API μ¬μ©μ μλ리μ€μ λ°λΌ λ€λ¦ λλ€. μμ μλ리μ€μμ κ°μ₯ "κ΄μ©μ μΈ" μ¬μ©λ²μ λ€μκ³Ό κ°μ΅λλ€.
```c#
f.μ¬μ©μ μ μ
.FromFactory(() => μλ‘μ΄ TestClass())
.With(x => x.Property, "foobar"));
or even the simplified one as AutoFixture will automatically pick up that constructor:
```c#
f.Customize<TestClass>(c => c
.With(x => x.Property, "foobar"));
λλ λ€μκ³Ό κ°μ΄ νμν κ²½μ° μλ μμ± μ±μ°κΈ°λ₯Ό λΉνμ±νν μ μμ΅λλ€.
```c#
f.μ¬μ©μ μ μ
.FromFactory(() => μλ‘μ΄ TestClass { μμ± = "foobar" })
.OmitAutoProperties());
However, in this case, probably, the `Customize<>()` API is an overhead. Instead, it's simpler to use the `fixture.Register()` method as it allows to use the constructed instance "as-is" without any post-processing:
```c#
f.Register(() => new TestClass { Property = "foobar" });
μ΄λ€ μ νν APIκ° λ μ ν©νμ§ μ΄ν΄νλ κ²μ΄ μ²μμλ νΌλμ€λ¬μΈ μ μμ§λ§ λμ€μλ λ μ¬μμ§ κ²μ λλ€. π μ΄ λͺ¨λ APIλ μ μ°μ±μ μ 곡νκ³ λ€μν μλ리μ€μμ λ€λ₯Έ μ΅μ μ΄ λ μ’μ 보μ λλ€.
μμ§ λͺ νν ν΄μΌ ν μ§λ¬Έμ΄ μλ κ²½μ° μλ €μ£Όμλ©΄ κΈ°κΊΌμ΄ λμλλ¦¬κ² μ΅λλ€.
μΆμ : λ€μ λ§ν¬λ λμμ΄ λ μ μμ΅λλ€.
PPS composer.Without(x => x.Property)
μλνλ μ΄μ λ μ΄ ννμμ΄ νΉμ μμ±/νλμ λν μλ μμ±μ λΉνμ±ννκΈ° λλ¬Έμ
λλ€. μ΄ κ²½μ° AutoFixtureλ μ΄κΈ° κ°μ²΄ κ°μ μλμΌλ‘ μμ±λ κ°μΌλ‘ μ¬μ μνμ§ μμ΅λλ€.
μ΄ λλΌμ΄ λ΅λ³μ κ°μ¬λ립λλ€! λ κ΅μ₯νλ€ :)
κ°μ₯ μ μ©ν λκΈ
λ¬Έμμ λ¬Έμ κ° μμ μ μμ΅λλ€ βΊοΈ
κΈ°λ³Έμ μΌλ‘ AutoFixtureλ
fixture.OmitAutoProperties = true
λ₯Ό μ€μ νμ¬ ν΄λΉ λμμ λΉνμ±ννμ§ μλ ν κ³΅κ° setterλ‘ μμ±μ μλμΌλ‘ μ±μλλ€.composer.FromFactory()
λ©μλλ₯Ό μ¬μ©νλ©΄ νΉμ μ νμ μΈμ€ν΄μ€λ₯Ό νμ±ννλ λ°©λ²μ μ§μ ν μ μμ§λ§ λμ€μ ν΄λΉ κ°μ²΄μ λν μμ±μ΄ κ³μ ν λΉλ©λλ€.μ€μ λ‘ μ μ ν AutoFixture API μ¬μ©μ μλ리μ€μ λ°λΌ λ€λ¦ λλ€. μμ μλ리μ€μμ κ°μ₯ "κ΄μ©μ μΈ" μ¬μ©λ²μ λ€μκ³Ό κ°μ΅λλ€.
```c#(c => c
f.μ¬μ©μ μ μ
.FromFactory(() => μλ‘μ΄ TestClass())
.With(x => x.Property, "foobar"));
λλ λ€μκ³Ό κ°μ΄ νμν κ²½μ° μλ μμ± μ±μ°κΈ°λ₯Ό λΉνμ±νν μ μμ΅λλ€.(c => c
```c#
f.μ¬μ©μ μ μ
.FromFactory(() => μλ‘μ΄ TestClass { μμ± = "foobar" })
.OmitAutoProperties());
μ΄λ€ μ νν APIκ° λ μ ν©νμ§ μ΄ν΄νλ κ²μ΄ μ²μμλ νΌλμ€λ¬μΈ μ μμ§λ§ λμ€μλ λ μ¬μμ§ κ²μ λλ€. π μ΄ λͺ¨λ APIλ μ μ°μ±μ μ 곡νκ³ λ€μν μλ리μ€μμ λ€λ₯Έ μ΅μ μ΄ λ μ’μ 보μ λλ€.
μμ§ λͺ νν ν΄μΌ ν μ§λ¬Έμ΄ μλ κ²½μ° μλ €μ£Όμλ©΄ κΈ°κΊΌμ΄ λμλλ¦¬κ² μ΅λλ€.
μΆμ : λ€μ λ§ν¬λ λμμ΄ λ μ μμ΅λλ€.
PPS
composer.Without(x => x.Property)
μλνλ μ΄μ λ μ΄ ννμμ΄ νΉμ μμ±/νλμ λν μλ μμ±μ λΉνμ±ννκΈ° λλ¬Έμ λλ€. μ΄ κ²½μ° AutoFixtureλ μ΄κΈ° κ°μ²΄ κ°μ μλμΌλ‘ μμ±λ κ°μΌλ‘ μ¬μ μνμ§ μμ΅λλ€.