2017-09-26 13 views
0

최근에는 단위 테스트를 많이하고 있는데 Moq 라이브러리에서 Mock.Of<T> 메서드를 발견했습니다. this을 읽고 궁극적으로 that을 읽은 후 Mock.Of이 조롱 된 인터페이스 인스턴스를 만드는 데 좋은 옵션이라는 것을 알았지 만 new 키워드로 직접 개체를 만들 수있는 일반 클래스는 어떻게 될까요? 일부 Nunit 자습서는이 방법을 사용하며 어떤 식 으로든 유용하지 않기 때문에 혼란 스럽습니다.Moq Mock.Of <Obj> 대 새로운 Obj();

Person newPerson = new Person() { Name = "David", Surname = "Smith" }; 
    Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith"); 

두 개체간에 차이가 있습니까? 이 경우 Mock.Of에는 이점이 있습니까? 아니면 클래스의 새 인스턴스를 만들 때 일반 new 키워드를 사용해야합니까?

답변

2

당신이 보여준 코드가 완전히 조롱의 요점을 놓치고 있다고 생각합니다. 실제 객체를 만들 필요가 없도록 Mocking은 인터페이스와 추상 클래스에서 작동해야합니다. 어느 쪽이든 아니면 당신이 모의 객체를 만들면

이렇게 당신은 Mock.Of<Person>을 할 수 있습니다. 그런 다음 테스트에 필요한 일부 값을 할당 할 수 있습니다.하지만 당신이하지 않는 것은 먼저 객체를 생성하고 설정 한 다음 그것의 조롱.

는이 같은 코드가 있다고 가정 :

public interface IPerson 
{ 
    some method and property signatures 
} 

다음이

public class Person : IPerson 
{ 
    some code here 
} 

당신은 매개 변수로 IPerson에 걸리는 방법이 지금 상상

다음과 같은 작업을 수행 할 수 있습니다 :

var mockedPerson = Mock.Of<IPerson>(); 
mockedPerson.Age = 27; 

int age = GetAge(mockedPerson); 
Assert.AreEqual(age, 27) 

실물의 모의 작품을 만드는 것은 나에게 의미가 없습니다.

+0

예 전적으로 동의합니다. 그래서 내가 왜이 튜토리얼에서이 접근법을 보았을 때 혼란스러워하는지, 그리고 그것이 내가이 질문으로 여기에 온 이유입니다. 슬프게도 나는 소스를 잃어서 자습서를 가리킬 수 없다. – Erexo