2012-02-29 7 views
3

단위 테스트에서 조롱하는 데 문제가있어 문제를 설명하기위한 간단한 예를 만들었습니다. 나는Moq를 사용하는 데 도움이 필요합니다.

private void TestCreate() 
    { 
     var mocker = new Mock<ISomeInterface>(); 
     mocker.Setup(x => x.Create(new SomeClass())).Returns(3); 
     var result = mocker.Object.Create(new SomeClass()); 
    } 

    private void TestCreate2() 
    { 
     var mocker = new Mock<ISomeInterface>(); 
     mocker.Setup(x => x.Create2("Test")).Returns(4); 
     var result = mocker.Object.Create2("Test"); 
    } 

TestCreate2가 작동 조롱 인터페이스를 테스트하기 위해

public class SomeClass : ISomeInterface 
    { 
     public int ID { get; set; } 
     public string Desc { get; set; } 

     public int Create(SomeClass t) 
     { 
      return 5; 
     } 

     public int Create2(string s) 
     { 
      return 7; 
     } 
    } 

    public interface ISomeInterface 
    { 
     int Create(SomeClass t); 
     int Create2(string s); 
    } 

가 지금은 두 가지 방법을 가지고 ... 다음과 조롱 결과를 반환 한 "4"
TestCreate 그러나 대신에 "0"을 반환 의 "3"

내가 인수로 정의 클래스와 간단하지 INT 년대와 문자열을 받아 모의 방법으로 할 수 있도록해야합니까?

답변

3

설치 호출 중에 전달한 SomeClass의 인스턴스를 가져올 때 TestCreate를 설정하여 3을 반환했기 때문입니다. 그러나 인라인 인스턴스를 새로 작성한 이후 실제 Create 호출 중에 전달 된 인스턴스는 동일하지 않습니다. 아래의 두 옵션 중 하나를 선택하면 문제가 해결됩니다 ...

private void TestCreate() 
{ 
    var mocker = new Mock<ISomeInterface>(); 
    mocker.Setup(x => x.Create(It.IsAny<SomeClass>())).Returns(3); 
    var result = mocker.Object.Create(new SomeClass()); 
} 

private void TestCreate() 
{ 
    var mocker = new Mock<ISomeInterface>(); 
    var someClass = new SomeClass(); 
    mocker.Setup(x => x.Create(someClass)).Returns(3); 
    var result = mocker.Object.Create(someClass); 
} 
관련 문제