내가 여기 스텁에 대해 잊지 것입니다. 스텁/모의는 종속성의 동작을 위장하려는 경우에 사용됩니다. 테스트 싶어 SomeClassClient이 있다면 당신은 당신의 SomeClass 스텁 것하고 SomeClass 사용 : FooClient을 테스트 할 때이 예에서는
public class Foo
{
public virtual int GetFoosInt()
{
return 12;
}
}
public class FooClient
{
private Foo _foo;
public FooClient(Foo foo)
{
_foo = foo;
}
public int AddOneToFoosInt()
{
return _foo.GetFoosInt() + 1;
}
}
를, 무엇을 테스트 할 것은()이 GetFoosInt "보다 1 반환 것입니다 ". FoClient를 테스트하기 위해 FoosInt가 무엇인지는 실제로 상관하지 않습니다. 그래서, 당신이 원하는 것을 반환하도록 GetFoosInt를 설정할 수있는 Foo 스텁을 생성합니다. 귀하의 경우에는
, 보호 된 가상 멤버를 테스트, 나는이 갈 것입니다 : 이것은 당신에게 보호 된 가상 테스트하기 위해 기본 동작에 '직접'액세스 할 수
[TestClass]
public class SomeClassTest
{
private class DummySomeClass : SomeClass
{
public bool IsHappyWrapper(string mood)
{
return IsHappy(mood);
}
}
[TestMethod]
public void SomeTest()
{
var myClass = new DummySomeClass();
Assert.IsTrue(myClass.IsHappyWrapper("Happy"));
}
}
. 주의 할 점은 추상 멤버를 정의하고 일반적으로 SomeClass에 추가하기 시작하면이 가상 상속자에 추가하여 테스트 유지 관리 오버 헤드를 추가해야한다는 것입니다.
저의 순수 주의자는 보호 된 회원을 남겨두고 공개 인터페이스를 통해서만 테스트해야한다고 말합니다. 하지만, 귀하의 상황에서 실용적 일 수도 있고 아닐 수도 있습니다. 나는이 접근법에 아무런 해가되지 않습니다.
IsHappy 메서드가 'protected'입니다. Class-Under-Test에서 메서드를 직접 호출하여 액세스 할 수 없습니다. – Ian
@ 이안 : 죄송 합니다만이 일로 돌아가려면 너무 오래 걸렸습니다. 내 대답 업데이트 –