반응형
생성자에 매개 변수가있을 때 Moq로 모의
moq를 사용하여 조롱하려는 개체가 있습니다. 구독의 생성자에는 필수 변수가 있습니다.
public class CustomerSyncEngine {
public CustomerSyncEngine(ILoggingProvider loggingProvider,
ICrmProvider crmProvider,
ICacheProvider cacheProvider) { ... }
}
이제 moq v3 "setup"또는 v4 "Mock.Of"구문을 사용하여 만들려고하는 것을 알아낼 수 없습니다. 여기 내가 지금까지 가지고있는 것이 마지막 줄은 모의가 아닌 실제를 제공하는 것입니다. 내가이 작업을 수행하는 이유는 확인하려는 CustomerSyncEngine에 메서드가 호출되기 때문입니다.
// setup
var mockCrm = Mock.Of<ICrmProvider>(x => x.GetPickLists() == crmPickLists);
var mockCache = Mock.Of<ICacheProvider>(x => x.GetPickLists() == cachePickLists);
var mockLogger = Mock.Of<ILoggingProvider>();
// need to mock the following, not create a real class like this...
var syncEngine = new CustomerSyncEngine(mockLogger, mockCrm, mockCache);
마지막 줄은 CustomerSyncEngine을 조롱하는 것이 아니라 새로운 키워드를 사용하고 있기 때문에 실제 인스턴스를 제공하는 것입니다.
당신은 선호합니다 Mock.Of<CustomerSyncEngine>()
Mocking Concrete 유형의 유일한 문제는 Moq에 공용 기본 생성자 (매개 변수 없음)가 필요하거나 생성자 arg 사양으로 Moq를 선택한다는 것입니다. http://www.mockobjects.com/2007/04/test-smell-mocking-concrete-classes.html
가장 좋은 방법은 클래스를 마우스 오른쪽 버튼으로 클릭하고 인터페이스 추출을 선택하는 것입니다.
마지막 줄을
var syncEngine = new Mock<CustomerSyncEngine>(mockLogger, mockCrm, mockCache).Object;
그리고 작동합니다
참고 URL : https://stackoverflow.com/questions/7414704/mocking-objects-with-moq-when-constructor-has-parameters
반응형
'IT' 카테고리의 다른 글
XIB 파일을 연 후 Xcode 6.3이 멈추거나 중단됨 (0) | 2020.09.25 |
---|---|
C / C ++ 프로젝트에 Maven 사용 (0) | 2020.09.25 |
웹 페이지에 RTSP 비디오 스트림을 표시하고 있습니까? (0) | 2020.09.25 |
"true"== true가 JavaScript에서 false를 표시하는 이유는 무엇입니까? (0) | 2020.09.25 |
pip로 편집 가능한 패키지를 제거하는 방법 (-e로 설치됨) (0) | 2020.09.25 |