2013-07-02 3 views
3

문제가있는 것처럼 보입니다. IUser 생성자를 받아들이는 클래스 (LoginService)가 있습니다. 이것은 유닛 테스트가 아닌 통합 테스트를 수행하기위한 것입니다. 이러한 이유 때문에 이들을 모의하고 싶지는 않습니다. 이미 유닛 테스트가 있으며, Moq를 사용하여 작업하고 있습니다.AutoFixture : 인스턴스를 만들 수 없습니다. 공용 생성자가 없을 수도 있습니다.

내가 설정 내 고정 : - 그것은 불평, 나는 IUSER의 버전을 동결 할 수 있도록하려면 다음

var fixture = new Fixture(); 

그리고, 나는 다음을 시도했지만 나는 일을 가져올 수 없습니다 그것은 아마도 생성자가 없기 때문에 인스턴스를 생성 할 수 없습니다.

var user = fixture.Freeze<IUser>(); 

그래서 나는

IUser user = new User(); // Create my IUser manually 
    fixture.Inject(user); 

다음 다음 마지막으로 SUT 과연 인스턴스가 주입을 만드는이 일을 작동하도록 관리했다.

var sut = fixture.Create<LoginService>(); 

이렇게 정확하게하고 있습니까? Freeze를 사용할 수 없으며 IUser를 수동으로 생성하여 조명기에 주입해야합니까?

어떤 도움이나 정보

+0

내가 방정식에서 autofixture 걸릴 수 있지만 내 생각 : 대신 같은 사용자 인스턴스, 당신은 예를 매번 원하는 경우

, 당신은 또한 UserIUser에 매핑 할 수 있습니다 그것은 비웃을 때조차도 편리합니다. var user = new User(); var sut = new LoginService (user); – Martin

답변

4

네, 맞습니다를 기대 - 당신은 당신이 그것을 주입해야하는 LoginServiceIUser의 특정 인스턴스를 제공합니다.

InjectIUser에 대한 모든 후속 요청 (있는 경우)에 영향을 미칩니다.

+0

아아, 그렇다면 항상 그 인스턴스를 얻을 것입니다. 이것이 올바른 방법입니다. – Martin

+0

* 기술적으로 * 당신이하는 일은 정확합니다 :) –

+0

확인해 주셔서 감사합니다. – Martin

3

Nikos Baxevanis의 대답은 정확하지만 그 고양이를 피하는 데는 여러 가지 방법이 있습니다. 물론

fixture.Customizations.Add(
    new TypeRelay(
     typeof(IUser), 
     typeof(User))); 
+0

훌륭합니다! 감사합니다, 주목할 가치가있는 것 – Martin