2012-01-26 2 views
1

좋은 날,Moq 확인 표현

(64 비트 컴퓨터에서) 응용 프로그램이 설치된 위치를 확인하기 위해 레지스트리 조회를 수행하는 클래스가 있습니다.

[Test, Explicit] 
public void Validate64Bit() 
{ 
    wsMock.Setup(x => x.IsInstalled).Returns(true); 
    wsMock.Setup(x => x.Path).Returns(@"C:\Program Files (x86)\DIRP\"); 

    IWorkstationLocator workstationLocator = new WorkstationLocator(); 
    string workstationInstallationPath = workstationLocator.Path; 

    Assert.That(workstationInstallationPath != string.Empty, "The install path should exist."); 
    wsMock.Verify(x => x.Path == workstationInstallationPath, 
     "64-bit Workstation Install Path should match: " + @"C:\Program Files (x86)\DIRP\"); 
    } 

하지만 오류 받고 있어요 :

여기을 확인하고 시도 단위 테스트를 쓰고 있어요 내가 가진 무엇

System.ArgumentException : 표현이되지 않습니다 메서드 호출 : x => x.Path == .workstationInstallationPath

그래서 내 질문은 : x.Path == wrokstationInstallationPath 경우 테스트 할 싶어요.

어떻게 이것을 .Verify() 메소드에서 수행 할 수 있습니까?

아니면 Assert를 사용하는 것이 더 좋습니까?

TIA,

coson

답변

2

당신은 정말 여기에 모의를 사용할 필요가 없습니다.

귀하의 SUTWorkstationLocator 클래스로 나타나고 확인 모두가 Path 속성이 특정 값과 같은 것입니다.

당신은 간단하게 할 수있는 :

[Test, Explicit] 
public void Validate64Bit() 
{ 
    var expectedPath = @"C:\Program Files (x86)\DIRP\"; 

    IWorkstationLocator workstationLocator = new WorkstationLocator(); 

    Assert.AreEqual(expectedPath, workstationLocator.Path, 
     "64-bit Workstation Install Path should match: " + expectedPath); 
} 
2

MOQ의 Verify 일반적으로 특정 메서드가 호출되었는지 확인하는 데 사용됩니다. 예를 들어,

// Verify with custom error message for failure 
mock.Verify(foo => foo.Execute("ping"), "When doing operation X, the service should be pinged always"); 

당신은 == workstationInstallationPath, 당신은 정말 그냥 두 값이 아닌 하나가 메소드 호출의 일종으로 설정 한 것을 확인, 동일하다고 주장하고 그 x.Path을 테스트하는 경우.