2012-09-02 2 views
1

일부 단위 테스트를 시도하고 인터페이스가 아닌 클래스 인스턴스를 사용하는 메서드를 테스트하는 문제가 발생했습니다. 이 경우 나는 MS Moles가 나를 도울 수 있다는 것을 알게되었습니다. 그러나 그들은 타입 캐스팅 상황에 친숙하지 않은 것으로 보인다. 그리고 아무런 정보도 찾지 못했고이 상황을 어떻게 처리해야하는지에 대한 질문도 없었습니다. 예 : Microsoft Moles and type casting

public class ClassA 
{ 
public int Number {get {return 10;}} 
} 

public class ClassB 
{ 
public int Count1(ClassA arg) { return arg.Number; } 
public int Count2(object arg) { return (arg as ClassA).Number; } 
} 

하고있는 동안

이 잘

var cl = new MolesUnitTesting.Moles.MClassA(); 
MolesUnitTesting.Moles.MClassA.AllInstances.NumberGet = t1 => 20; 

첫 번째 Count 작품을 테스트하고 20을 반환하지만 두 번째 반환 Null에 캐스팅. 인터페이스 및 일반적인 조롱을 사용하지 않고 그러한 방법을 테스트 할 수있는 방법이 있습니까? 나를 도와 줄 수있는 다른 라이브러리가 있다면 그것의 이름을 알려주십시오. 대신 다음을 수행 할 수있는 ClassA 유형의 모든 인스턴스를 조롱의

답변

0

:이 자동으로 ClassA 인스턴스로 변환됩니다 때문에 Count1에 대한 직접 몰을 사용할 수

var target = new MClassA(); 

target.NumberGet =() => 42; 

Assert.AreEqual(Count1(target), 42); 
Assert.AreEqual(Count2(target.Instance), 42); 

알 수 있습니다. 그러나 Count2object을 수신하므로 사용자는 명시 적이어야하고, ClassA 인스턴스를 나타내는 target.Instance을 전달해야합니다.

public static implicit operator ClassA(MoleBase<ClassA> mole) { // ... } 
+0

감사 : MoleBase<ClassA>에서 상속 생성 몰 클래스 MClassA는, 다음과 같은 암시 적 연산자를 정의하기 때문에

이유 Count1(target) 작품이다. 이전에 나는 또한 무덤 클래스에서 Instance를 사용하려고 시도했지만 나에게 원래 값을 반환했지만 이제는 모두 괜찮습니다. 나에게 마술처럼 보입니다. – Ritro