2010-01-30 2 views
1

저는 Moq을 사용하고 있습니다. 개인적인 방법을 테스트해야합니다.Moq을 사용한 개인 메서드 테스트가 작동하지 않습니다.

나는이 어셈블리가 :

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    etc... 
} 

CustomerBusiness.dll이있다

공용 인터페이스 ICustomer { 무효 주문 (:

CustomerTest.dll 
CustomerBusiness.dll 

을 다음과 같이 그래서 CustomerTest DLL은 클래스가); }

public class Customer:ICustomer 
{ 
    public void Buy() 
    { 
     etc... 
    } 

    protected virtual bool CanTestPrivateMethod() 
    { 
     return true; 
    } 

} 

가 나는도 있지만 차이 [assembly: InternalsVisibleTo("CustomerTest.CustomerTestFixture") 을 추가 한

System.ArgumentException : Member ICustomer.CannotTestMethod does not exist. 
at Moq.Protected.ProtectedMock`1.ThrowIfMemberMissing(String memberName, MethodInfo method, PropertyInfo property) 
at Moq.Protected.ProtectedMock`1.Setup(String methodOrPropertyName, Object[] args) 

다음과 같은 오류를 얻을!

무엇이 잘못 되었나요? 나는 나의 인터페이스가 그런 방법이 아니라는 것을 안다. 그것은 나의 방법이 사적이어야한다는 점이다. 예를 들고 도울 수 있습니까?

답변

1

모의 객체를 만들면 조롱 할 유형 또는 인터페이스의 가상 및 추상 멤버가 구현됩니다.

Mock<ICustomer>을 생성하면 고객 인터페이스의 한 가지 방법을 구현합니다. Customer 클래스에 추가 한 메서드에 대한 지식이 없습니다. 이 방법을 조롱해야한다면 Mock<Customer>을 만들어야합니다. sense.Do하게

+0

은 내가 어셈블리 정보에 InternalVisibleTo 속성 또는 내가 그것을 삭제할 수 필요 감사 – user9969

+0

은 또한 당신이 고마워요, devnet247 @ – user9969

+0

로 단계 수? InternalsVisibleTo' 물건을 조롱하는 능력에 영향을 미치지 않습니다 '제거 테스트의 다른 측면에서는 중요 할 수 있습니다. 그것을 제거하면 컴파일 타임에 뛰어 내리지 않는 효과가 없어야합니다. –