2012-12-10 3 views
5

Moq 및 단위 테스트를 처음 사용했습니다. 내가 단위 테스트를하고있다 그리고 이것은 다음과 같은 코드 :Moq와의 단위 테스트 인터페이스

내 문제는 시험이 항상 내가 즉, 반환 매개 변수에 넣어 문자열을 반환하는 것입니다, 항상 돌아갑니다
private Mock<IServiceAdapter> repository; 

    [TestInitialize] 
    public void Initialize() 
    { 
     repository= new Mock<IServiceAdapter>(); 
    } 

[TestMethod()] 
    public void SaveTest() 
    { 
     //Setup 
     string Name = "Name1"; 
     string Type = "1"; 
     string parentID = null; 

     repository.Setup(x => x.Save(Name , Type, parentID)).Returns("Success").Verifiable(); 

     //Do 
     var result = repository.Object.Save(Name , Type, parentID); 
     //Assert 
     repository.Verify(); 
    } 

"성공 "또는 내가 그 자리에 쓴 모든 것. 나는 그것이 서비스의 실제 행동이 아니기 때문에 그것이 옳지 않다고 생각합니다. 누구나 내가 테스트하려고하는 "저장"서비스의 실제 동작을 어떻게 미러링 할 수 있는지 알고 있습니다. 따라서 반환 문자열이 서비스 메소드와 다른 경우 테스트가 실패해야합니다.

편집

ServiceAdapter 인터페이스 나는 REST 서비스처럼 호출 할 웹 서비스에 대한 바로 래퍼. 그것은 Web Forms Project입니다.

나는

How to mock a web service

내가 그것을 작동하게하는 의존성 삽입 (Dependency Injection)와 FakeController 같은 것을 만들어야합니까이 게시물에 뭔가를하고있어?

답변

11

여기 모의을 테스트하고 있습니다.이 모의이 실제 응용 프로그램에서는 사용되지 않으므로 아무 것도주지 못합니다. 단위 테스트에서는 실제 응용 프로그램 (예 : 인터페이스 구현)에 존재하는 실제 객체를 만들고 테스트해야합니다. 테스트중인 객체의 조롱을 조롱하는 데 사용되는 모의 객체입니다.

서비스 모의 모형은 해당 어댑터를 사용하는 객체의 테스트에 유용합니다. 일부 컨트롤러 테스트 :

private FooController _controller; // object under test, real object 
private Mock<IServiceAdapter> _serviceAdapter; // dependency of controller 

[TestInitialize] 
public void Initialize() 
{ 
    _serviceAdapter = new Mock<IServiceAdapter>(); 
    _controller = new FooController(_serviceAdapter.Object); 
} 

[TestMethod()] 
public void SaveTest() 
{ 
    // Arrange 
    string name = "Name1"; 
    string type = "1"; 
    string parentID = null; 

    _serviceAdapter.Setup(x => x.Save(name , type, parentID)) 
        .Returns("Success").Verifiable(); 

    // Act on your object under test! 
    // controller will call dependency 
    var result = _controller.Bar(name , type, parentID); 

    // Assert 
    Assert.True(result); // verify result is correct 
    _serviceAdapter.Verify(); // verify dependency was called 
} 
+0

여기에 뭔가가 없습니다. 컨트롤러가 없습니다 (웹 양식). 나는 그 질문에 더 많은 정보를 넣을 것이다. –

+0

@MorganSoren 컨트롤러는 그 예입니다. 서비스 어댑터를 사용하는 다른 클래스 일 수 있습니다. 나는 웹 폼이 단위 테스트가 불가능한 것으로 생각한다. 보통 테스트 가능한 웹 폼 애플리케이션을 만드는 데 사용되는 MVP 패턴이다. –

+0

@MorganSoren 여기에 대한 질문입니다 [단위 테스트 웹 양식] (http://programmers.stackexchange.com/questions/116089/is-is-possible-to-unit-test-a-web-forms-site) –