2009-09-06 4 views
0

moq와 함께 내 모의 객체를 삽입하기 위해 생성자 주입 패턴을 사용하고 있습니다.Moq 객체 질문 설정

그래서 나는

property UserMock 
property IService // interface 

public void PreSetup() 
{ 
    UserMock = new UserMock; 
    ITaskService = new Service(UserMock.object); 

} 

는 지금이

public void TestSomething() 
{ 
    UserMock.Setup(u => u.SomeMethod(It.IsAny<string>())); 
} 

같은 단위 테스트 방법은 지금은 내가 항상 후이 작업을 수행해야 할 것입니다 생각이 내 NUNIT 테스트에서 이런 일이있다.

public void TestSomething() 
    { 
     UserMock.Setup(u => u.SomeMethod(It.IsAny<string>())); 
     ITaskService.User = UserMock.Object 
    } 

나는 이것을 할 필요가없는 것 같습니다. 내 생각과 마찬가지로 객체가 생성자로 전달되면서 TaskServiceClass의 "User"속성으로 설정됩니다.

그래서 나중에 객체를 재설정하지 않으면 메소드에 무언가를 추가하면 설정되지 않습니다.

그런 경우는 아닙니다. 그래서 나는 무엇을 이해하지 못합니까?

감사

답변

1

이 모든 추측입니다 :하지만 UserMock.Object.SomeMethod 아마 UserMock.SomeMethod 같이, 부모에 대한 사용자 지정 방법으로 호출합니다. 적어도 SomeMethod의 정의는 새로운 객체를 만들지 않고 UserMock.Object에서 변경됩니다.

그래서 내가 맞으면 ITaskService가 연결을 잃지 않고 SomeMethod의 처리를 자유롭게 변경할 수있는 UserMock에 대한 참조를 보유하고있는 UserMock.Object에 대한 참조를 보유하고 있으므로 생성자에 UserMock.Object를 전달하면 문제가 없습니다. PreSetup에서 설정했습니다.

+0

아, 그런 일종의 생각은 당신이 참조를 만들 때 객체를 만들 때마다 잊어 버리고 다른 객체를 가리킬 수 있습니다. – chobo2

+0

나는 이런 방식으로 모의 행위를 한 번도 사용한 적이 없으므로 잠깐 생각하지는 않았다. 일반적으로 각 테스트 방법 내에서 신선한 모의 (mock)와 서비스를 만들지 만 습관과 테스트별로 유연해야합니다. –