λ κ°μ ꡬ체μ μΈ μΈμ€ν΄μ€λ₯Ό μ£Όμ ν λ λ λ²μ§Έ μΈμ€ν΄μ€κ° 첫 λ²μ§Έ μΈμ€ν΄μ€λ₯Ό μ¬μ μν©λλ€.
ꡬ체μ μΈ μΈμ€ν΄μ€λ₯Ό μ½μ ν λ€μ μ‘°λ‘±λ μΈμ€ν΄μ€λ₯Ό μ½μ ν λ λ λ²μ§Έ μΈμ€ν΄μ€λ 첫 λ²μ§Έ μΈμ€ν΄μ€λ₯Ό μ¬μ μνμ§ μμ΅λλ€.
μ΄κ²μ λͺ¨μλ₯Ό μ¬μ©νλ μΌλΆ ν μ€νΈμ ꡬνμ μ¬μ©νλ μΌλΆ ν μ€νΈ(ν μ€νΈ κ°μ κ³ μ μ₯μΉλ₯Ό 곡μ νκΈ° μν΄ ν μ€νΈ ν΄λμ€ μμ±μλ₯Ό μ¬μ©)λ₯Ό μννλ μμ΄λμ΄λ₯Ό μλΉν μ΄μνκ² λ§λλλ€.
λ κ°μ ꡬ체μ μΈ μΈμ€ν΄μ€λ₯Ό μ£Όμ ν λ λ λ²μ§Έ μΈμ€ν΄μ€κ° 첫 λ²μ§Έ μΈμ€ν΄μ€λ₯Ό μ¬μ μν©λλ€.
ꡬ체μ μΈ μΈμ€ν΄μ€λ₯Ό μ£Όμ ν λ€μ μ‘°λ‘±λ μΈμ€ν΄μ€λ₯Ό μ£Όμ νλ©΄ λ λ²μ§Έ μΈμ€ν΄μ€κ° 첫 λ²μ§Έ μΈμ€ν΄μ€λ₯Ό μ¬μ μν©λλ€.
```C#
System.Collections.Generic μ¬μ©;
AutoFixture μ¬μ©;
AutoFixture.AutoMoq μ¬μ©;
Moqλ₯Ό μ¬μ©νμ¬;
Xunitμ μ¬μ©νμ¬;
λ€μμ€νμ΄μ€ SomeNamespace
{
κ³΅κ° ν΄λμ€ AutoFixtureTests
{
[μ¬μ€]
// ν΅κ³Ό
κ³΅κ° λ¬΄ν¨ Should_OverridePreviouslyInjectedString()
{
const λ¬Έμμ΄ test1 = "test1";
const λ¬Έμμ΄ test2 = "test2";
var fixture = new Fixture();
fixture.Inject(test1);
fixture.Inject(test2);
Assert.Equal(fixture.Create<string>(), test2);
}
[Fact]
// Fails
public void Should_OverridePreviouslyInjectedInstance()
{
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var sut1 = new List<int>();
fixture.Inject<IList<int>>(sut1);
fixture.Freeze<Mock<IList<int>>>();
var sut2 = fixture.Create<IList<int>>();
Assert.NotSame(sut1, sut2);
}
}
}
```
μλ νμΈμ @charles-salmon λ,
μκ°μ λ΄μ΄ μ κ³ ν΄ μ£Όμ μ κ°μ¬ν©λλ€.
λΉμ μ΄ κ΄μ°°νκ³ μλ νλμ _μ€κ³μ μν_ κ²μ λλ€. μ€λͺ μ λλ¦¬κ² μ΅λλ€. π
Freeze<T>
λ©μλ μ ꡬν μ 보면:
var value = fixture.Create<T>();
fixture.Inject(value);
return value;
T
μ νλ³Έμ λ§λ€κ³ κ³ μ μ₯μΉμ μ£Όμ
νλ κ²μ΄ μ λΆμμ μ μ μμ΅λλ€. μ€μ λ‘ Freeze
λ©μλλ λ°λ‘ μ΄ μμ
μ λν νΈλ¦¬ν μ§λ¦κΈΈμ
λλ€. @ploeh λ 2010λ
Freeze λ°©λ²μ μκ°ν κ·Έμ κ²μλ¬Όμμ λ€μ
μ°λ¦¬λ μ΄ μ½λ© κ΄μ©κ΅¬λ₯Ό λ무 λ§μ΄ μ¬μ©νμ¬ νΈλ¦¬ν λ°©λ²μΌλ‘ μΊ‘μννκΈ°λ‘ κ²°μ νμ΅λλ€. μ½κ°μ ν λ‘ νμ μ°λ¦¬λ FreezeλΌλ μ΄λ¦μ λλ¬νμ΅λλ€. μλνλ©΄ μ°λ¦¬λ μ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μν κΈ°λ³Έ μκ³ λ¦¬μ¦μ μ°ννμ¬ κ³ μ μ₯μΉμμ λ¨μΌ μ΅λͺ λ³μλ₯Ό λ³Έμ§μ μΌλ‘ κ³ μ νκΈ° λλ¬Έμ λλ€.
μ΄λ₯Ό κ°μν λ λμΌν μ νμ T
λ₯Ό μ£Όμ
λ μΈμ€ν΄μ€λ‘ κ³ μ νλ©΄ λμΌν μΈμ€ν΄μ€κ° μμ±λλ€λ κ²μ λλΌμ΄ μΌμ΄ μλλλ€.
μ΄μ κ·νμ μμ μ ν΄κ²°νλ €λ©΄ λ€μμ μννμμμ€.
μ΄κ²μ λͺ¨μλ₯Ό μ¬μ©νλ μΌλΆ ν μ€νΈμ ꡬνμ μ¬μ©νλ μΌλΆ ν μ€νΈ(ν μ€νΈ κ°μ κ³ μ μ₯μΉλ₯Ό 곡μ νκΈ° μν΄ ν μ€νΈ ν΄λμ€ μμ±μλ₯Ό μ¬μ©)λ₯Ό μννλ μμ΄λμ΄λ₯Ό μλΉν μ΄μνκ² λ§λλλ€.
κ³ μ μ₯μΉκ° ν μ€νΈκ° μ€νλλ _context_λ₯Ό λνλ΄λ©΄ μ¬λ¬ ν μ€νΈ κ° λμΌν κ³ μ μ₯μΉλ₯Ό 곡μ νλλ‘ ν μ μμ΅λλ€ . κ·Έλ¬λ μ΄κ²μ μ¬λ¬ κ°μ§(μΆ©λ κ°λ₯μ±μ΄ μλ) λ¬Έμ λ₯Ό νΌν©νλ λκ°λ₯Ό μΉλ₯΄κ² λ©λλ€.
xUnit Patterns μ± μ λ€μκ³Ό κ°μ΄ μμ½ν©λλ€ .
Aμ κ°μ₯ ν° λ¬Έμ 곡μ μΉκ΅¬ λ μλ§λ μ€ν κ²°κ³Ό μ¬μ΄μ "μΆ©λ"μ μ΄λν μ μλ€λ κ²μ΄λ€ λΉμ μμ ν μ€νΈ ν μ€νΈλ λ€λ₯Έ μν κ²°κ³Όμ μμ‘΄ ν μ μκΈ° λλ¬Έμ΄λ€. λ λ€λ₯Έ λ¬Έμ λ λ§μ ν μ€νΈλ₯Ό μ 곡νλλ‘ μ€κ³λ κ³ μ μ₯μΉκ° λ¨μΌ ν μ€νΈμ νμν μ΅μ κ³ μ μ₯μΉ λ³΄λ€ ν¨μ¬ λ 볡μ‘ν μλ°μ μλ€λ κ²μ λλ€.
μ΄ "μΆ©λ"μ ν
μ€νΈμμ T
μ νμ κ°μ²΄κ° νΉμ μΈμ€ν΄μ€μΌ κ²μΌλ‘ μμνλ λ°λ©΄ λ€λ₯Έ ν
μ€νΈμμλ T
κ° κ°μ§ κ°μ²΄ T
κ²μΌλ‘ μμν λ λ°μ ν©λλ€ .
T
κ°μ μ νμ΄ λͺ¨μ _λ°_ ꡬ체μ μΈ μΈμ€ν΄μ€κ° λλ κ²μ΄ μλ―Έκ° μλ ν
μ€νΈ μλ리μ€λ₯Ό μκ°ν μ μκΈ° λλ¬Έμ (μλͺ»λ κ²μΌλ‘ μ
μ¦λμ΄ κΈ°μ©λλ€) λ€μμ μ μν©λλ€. ν
μ€νΈλ κ°κ°μ νΉμ μλ리μ€λ₯Ό μ 곡νλλ‘ κ΅¬μ±λ μλ‘ λ€λ₯Έ κ³ μ μ₯μΉλ₯Ό μ¬μ©ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μλ νμΈμ @charles-salmon λ,
μκ°μ λ΄μ΄ μ κ³ ν΄ μ£Όμ μ κ°μ¬ν©λλ€.
λΉμ μ΄ κ΄μ°°νκ³ μλ νλμ _μ€κ³μ μν_ κ²μ λλ€. μ€λͺ μ λλ¦¬κ² μ΅λλ€. π
Freeze<T>
λ©μλ μ ꡬν μ 보면:T
μ νλ³Έμ λ§λ€κ³ κ³ μ μ₯μΉμ μ£Όμ νλ κ²μ΄ μ λΆμμ μ μ μμ΅λλ€. μ€μ λ‘Freeze
λ©μλλ λ°λ‘ μ΄ μμ μ λν νΈλ¦¬ν μ§λ¦κΈΈμ λλ€. @ploeh λ 2010λ Freeze λ°©λ²μ μκ°ν κ·Έμ κ²μλ¬Όμμ λ€μμ΄λ₯Ό κ°μν λ λμΌν μ νμ
T
λ₯Ό μ£Όμ λ μΈμ€ν΄μ€λ‘ κ³ μ νλ©΄ λμΌν μΈμ€ν΄μ€κ° μμ±λλ€λ κ²μ λλΌμ΄ μΌμ΄ μλλλ€.μ΄μ κ·νμ μμ μ ν΄κ²°νλ €λ©΄ λ€μμ μννμμμ€.
κ³ μ μ₯μΉκ° ν μ€νΈκ° μ€νλλ _context_λ₯Ό λνλ΄λ©΄ μ¬λ¬ ν μ€νΈ κ° λμΌν κ³ μ μ₯μΉλ₯Ό 곡μ νλλ‘ ν μ μμ΅λλ€ . κ·Έλ¬λ μ΄κ²μ μ¬λ¬ κ°μ§(μΆ©λ κ°λ₯μ±μ΄ μλ) λ¬Έμ λ₯Ό νΌν©νλ λκ°λ₯Ό μΉλ₯΄κ² λ©λλ€.
xUnit Patterns μ± μ λ€μκ³Ό κ°μ΄ μμ½ν©λλ€ .
μ΄ "μΆ©λ"μ ν μ€νΈμμ
T
μ νμ κ°μ²΄κ° νΉμ μΈμ€ν΄μ€μΌ κ²μΌλ‘ μμνλ λ°λ©΄ λ€λ₯Έ ν μ€νΈμμλT
κ° κ°μ§ κ°μ²΄T
κ²μΌλ‘ μμν λ λ°μ ν©λλ€ .T
κ°μ μ νμ΄ λͺ¨μ _λ°_ ꡬ체μ μΈ μΈμ€ν΄μ€κ° λλ κ²μ΄ μλ―Έκ° μλ ν μ€νΈ μλ리μ€λ₯Ό μκ°ν μ μκΈ° λλ¬Έμ (μλͺ»λ κ²μΌλ‘ μ μ¦λμ΄ κΈ°μ©λλ€) λ€μμ μ μν©λλ€. ν μ€νΈλ κ°κ°μ νΉμ μλ리μ€λ₯Ό μ 곡νλλ‘ κ΅¬μ±λ μλ‘ λ€λ₯Έ κ³ μ μ₯μΉλ₯Ό μ¬μ©ν©λλ€.