2013-04-22 3 views
1

종속성이있는 서비스 메소드에 대한 단위 테스트를하고 있습니다. 간체 : 내가 원하는 것은 완전히 난 아직 내 테스트 중에 null 참조 예외로 실행 호출을 스텁 왜 _connection 멤버가 설정되어 있지 않기 때문에, 인, ConditionChecker.CanDoSomething의 구현을 무시하는 것입니다Rhino 스텁을 사용한 UnitTest의 범위 제한

public class ConditionChecker 
{ 
    private SqlConnection _connection; 

    public bool CanDoSomething() 
    { 
     return _connection.State == ConnectionState.Open; 
    } 
} 

public class A 
{ 
    public ConditionChecker Checker { get; set; } 

    public bool CanInvokeA() 
    { 
     return Checker.CanDoSomething(); 
    } 
} 

[TestClass] 
public class ATests 
{ 
    [TestMethod] 
    public void TestCanInvokeA() 
    { 
     // arrange 
     A a = new A(); 
     ConditionChecker checker = MockRepository.GenerateStub<ConditionChecker>(); 
     checker.Stub(x => x.CanDoSomething()).Return(true); 
     a.Checker = checker; 

     // act 
     bool actual = a.CanInvokeA(); 

     // assert 
     Assert.AreEqual(true, actual); 
    } 
} 

. 여기서 내가 뭘 잘못하고 있니?

public virtual bool CanDoSomething() 
{ 
} 

장면 뒤에 때문에 코뿔소 모의가 ConditionChecker의 동적 프록시를 만들 것이다, 그래서 당신은 코뿔소 모의 그것을 오버라이드 (override) 할 수 있도록 virtual을 표시해야합니다

답변

1

당신은 단지 virtual 같은 방법을 표시, 그것은 작동합니다 .

+0

감사합니다. 따라서이 제한은 Castle.DynamicProxy에서 발생합니다. 맞습니까? –

+0

@SebastianEdelmeier : correct :) –

+0

아! 그리고 'ConditionChecker '의 생성자에 내가 바이 패스하기 원하는 코드가 있다면? 그건 불가능할 겁니다, 그렇죠? –