2013-01-01 9 views
0

이 두 줄의 코드는 제목에서 언급 한 오류를 나타냅니다. 나는 TestClass<method name>은 메소드 그룹이기 때문에 할당 할 수 없습니다. 오류 (Moles 프레임 워크 사용)

var stubTestClass = new StubsTutorial.Moles.STestClass(); 
stubTestClass.WriteStuff =() => "Moled in static class!"; 

에 대한 스텁을 정의하는 것을 시도하고있다 그리고이 함수 WriteStuff은() 내가 잘못 가고 어디에 확실하지 않다

public class TestClass { 
    public string WriteStuff() { 
    return "Stuff written in main class."; 
    } 
} 

을 정의하는 방법이다. 그리고 방향이 나를 도울 것입니다. 당신은 또한 가상 노출이 아닌 추상 클래스에 대한 스텁을 생성 몰을 구성 할 수 있지만

답변

0

(추상 또는 인터페이스에 표시되지 않은) 내가 발견

각 몰 유형은 이름 및 배치에 "M"을 앞에 붙이는 이름

.Moles 네임 스페이스에 추가하십시오. 나는 마이크로 소프트 두더지와 경험이 없지만

그래서 어쩌면 당신의 라인

var stubTestClass = new StubsTutorial.Moles.STestClass(); 

var moleTestClass = new StubsTutorial.Moles.MTestClass(); 

로 변경해야합니다.

+0

예. 생성 된 스텁은 부분 스텁이므로 비 가상 멤버를 인스턴스화 할 수 없습니다. 옵션은 Moles를 사용하는 것입니다. 감사. – TheSilverBullet

+0

@ TheSilverBullet주의해야 할 중요한 점은'WriteStuff'가 고려중인 Moles 클래스 내부의 메소드이거나 여전히 델리게이트 타입의 프로퍼티, 즉'Func '타입의 프로퍼티로 변환 된 경우입니다 이 경우 (매개 변수가 0이고 반환 형식이'string' 인 메소드를 나타냄).난'STestClass' ("스텁"버전)은 특별히 이름이 지정된 필드 (아마도'WriteStuff'를 가진 무언가라고 불리는)에 델리게이트를 갖는 것으로 생각합니다. 'WriteStuff' 메소드는 여전히 메소드입니다. 즉, 테스트중인 메소드에 스터브'STestClass'를 전달할 수 있습니다. –

0

나는,

"기본적으로

은 스텁 모든 인터페이스와 추상 클래스에 대해 생성되는 두더지 사용자하지만 ... 아니에요 방법 "

그래서

가) 당신은 내가하는 방법이 경우 가상 표시되지 않은 주) 제대로 B 구성한) 올바른지

public virtual string WriteStuff() { ... } 

둘러싸는 클래스가 콘크리트이기 때문에는 a tutorial에서

+0

이것은 Moles 프레임 워크와 관련이 있습니다. STestClass는 TestClass에 대해 정의 된 스텁입니다. 태그를 확인하십시오. – TheSilverBullet

+0

정확히 어떤 줄이 오류를 줄 수 있는지 정의 할 수 있습니까? 둘 중 하나 또는 둘 다입니다. 나는 그것이 두 번째라고 생각한다 ... –

+0

그리고 테스트 클래스를 만들 때 Moles가 사용하는 명명 규칙과 관련된 다른 대답을 참조하십시오. –

0

스텁은 오버라이드하여 퍼블릭 추상 및 가상 메서드에 대한 가짜 위임을 만듭니다. 메서드가 가상 또는 추상으로 표시되지 않으면 할당 된 대리자를 반환하기 위해 메서드가 재정의되지 않았기 때문에 스텁 대리자에 값을 할당하려는 모든 시도가 컴파일러에 의해 무효화됩니다. 시험 방법을 두 가지 방법으로 테스트 스터브로 시험해보십시오. 하나는 공개이고 다른 하나는 공개입니다. 인터페이스 계약 또는 추상 또는 가상 메소드가없는 공용 클래스를 테스트하려면, 스텁이 아닌 shim을 사용해야합니다.