2012-01-27 3 views
1

모의 객체를 만든 IManager 인터페이스가 있습니다. 메서드가 있습니다Rhino Mocks, Argert 제약 조건이있는 AssertWasCalled

void LogUserWithParams(string maskValue, E_LOG_LEVEL logLevel, 
string formatMsg, ref Array args); 

메서드가 인수와 함께 호출되는지 확인하기 위해 테스트를 만들었습니다. 인수 0을 사용하여 정의해야합니다 :

Array logParams = Arg<Array>.Ref(Is.Anything(), new object[0]).Dummy; 
manager.AssertWasCalled(man => man.LogUserWithParams(
    Arg<string>.Is.Anything, 
    Arg<E_LOG_LEVEL>.Is.Anything, 
    Arg<string>.Is.Anything, 
    ref logParams 
    ) 
); 

그것은 매우 이상한 메시지를 생산 Arg.Is, Arg.Text 또는 Arg.List

당신이 볼 수 있듯이, 모든 인수가의 Arg을 사용하여 정의됩니다. 테스트에 무엇이 잘못 됐는지 알고 싶습니까?

답변

3

미리 정의 된 변수를 사용하여 호출하면 예외가 발생합니다.

manager.AssertWasCalled(man => man.LogUserWithParams(
    Arg<string>.Is.Anything, 
    Arg<E_LOG_LEVEL>.Is.Anything, 
    Arg<string>.Is.Anything, 
    ref Arg<Array>.Ref(Is.Anything(), new object[0]).Dummy 
)); 

편집 : 나는이 간단한 프로그램과 모든 실험을

가 예상대로 작동하는 것 같다 :

public interface ILogger 
{ 
    void LogUserWithParams(string maskValue, ref Array args); 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var loggerMock = MockRepository.GenerateMock<ILogger>(); 
     loggerMock.Expect(l => l.LogUserWithParams(
      Arg<string>.Is.Anything, 
      ref Arg<Array>.Ref(Is.Anything(), new object[0]).Dummy 
     )); 

     Array output = new Array(); 
     loggerMock.LogUserWithParams("[a-z]", ref output); 
     loggerMock.VerifyAllExpectations(); 

     Console.WriteLine("Done..."); 
     Console.ReadLine(); 
    } 
} 
+0

감사합니다, 지미이 트릭을 수행합니다! 인수 3과 같이 정의해야합니다 :의 Arg .OUT (ReturnValue를) .Dummy 에서 그러므로 내가 심판의 Arg .OUT에 마지막 인수를 변경했다 (새로운 객체 이상한 충분히, 당신의 변형은 다른 신비 오류가 발생 [0]) Dummy 문제 해결 방법은 좋지만이 매개 변수에 대한 추가 제약 조건을 정의 할 방법이 없습니다. –

+0

@IvanGerken : 그건 이상한 일입니다. 당신이 내 샘플을 시험해 볼 수 있습니까? 또한, Rhino의 어떤 버전을 사용하고 있습니까? (여기 3.6)? –

+0

나는 내 프로젝트에서 사용하는 Rhino Mock과 동일한 버전 3.6으로 샘플을 시험해 보았지만 정상적으로 작동했습니다. 한 줄만 변경하면됩니다 : "Array output = new Array();" "배열 출력 = 새 개체 [0];". 어떻게 샘플을 만들 수 있었는지 궁금합니다. 음, 아마도 RM의 거의 재현 할 수없는 결함을 발견했을 것입니다. 내 테스트에서 나는 PIA에서 나온 인터페이스를 거의 십계 조롱했다. 도와 주셔서 다시 한 번 감사드립니다! –

관련 문제