StructureMap에 의존하는 일부 단위 테스트를 작성하므로 내 [SetUp] 메서드에서 ObjectFactory를 완전히 재설정하고 싶습니다. 이것은 내 [설정] 방법은 지금 모습입니다 :StructMap의 ObjectFactory 재설정
는[SetUp]
public void SetUp()
{
ObjectFactory.Initialize(initializationExpression => {});
}
이 내가 ObjectFactory.WhatDoIHave() 메소드를 실행할 수 있기 때문에 구성을 다시 나타나고 내 구성이 포함되어 있지 않습니다. 그러나 캐시 된 개체 인스턴스는 제거되지 않으며 이후 테스트에서 반환됩니다. 방법이 있습니까 완전히 ObjectFactory 재설정?
ObjectFactory.EjectAllInstancesOf()를 사용해야 할 수도 있지만 도움이되지 않는다고 생각했습니다.
버전 2.5.3을 사용하고 있습니다.
여기 제가 말하고자하는 것을 보여줄 수있는 인위적인 코드가 있습니다. 나는이 시험이 통과되기를 기대하지만, 그렇지 않다.
[TestFixture]
public class TestingStructureMap
{
[Test]
public void FirstTestUsingCachedObjects()
{
ObjectFactory.Configure(configure =>
configure.ForRequestedType<ISomeInterface>()
.TheDefaultIsConcreteType<SomeImplementation>()
.CacheBy(InstanceScope.ThreadLocal)
);
ISomeInterface firstSomeInterface = ObjectFactory.GetInstance<ISomeInterface>();
Assert.AreEqual(1, firstSomeInterface.ID);
ObjectFactory.Initialize(initializationExpression => { });
ObjectFactory.EjectAllInstancesOf<ISomeInterface>();
ObjectFactory.Configure(configure =>
configure.ForRequestedType<ISomeInterface>()
.TheDefaultIsConcreteType<SomeImplementation>()
.CacheBy(InstanceScope.ThreadLocal)
);
ISomeInterface secondSomeInterface = ObjectFactory.GetInstance<ISomeInterface>();
Assert.AreEqual(2, secondSomeInterface.ID);
}
public interface ISomeInterface
{
int ID { get; }
}
public class SomeImplementation : ISomeInterface
{
private static int NumberOfInstancesCreated;
private readonly int id;
public int ID
{
get { return id; }
}
public SomeImplementation()
{
id = ++NumberOfInstancesCreated;
}
}
}
내가 대신 컨테이너를 사용하는 위의 게시 된 테스트를 수정하고 계속 실패 :
이 작동합니까. –
컨테이너를 재생성하는 것은 꽤 느리지 만 ... – Andrew