반응형
MOQ-다른 인터페이스로 캐스팅해야하는 인터페이스를 모의하는 방법은 무엇입니까?
내가하고 싶은 것은 I1에 대한 moq를 구성하는 것입니다-괜찮습니다 ... 그러나이 mock을 사용하는 테스트하는 방법 중에 I2에 캐스트하지 않는 일부 속성에 액세스해야합니다 I1
Interface I1
{ int AProperty{get;set;}}
Interface I2
{int AnotherProperty{get;set;}}
그런 다음 몇 가지 물건이 있습니다.
Class O1 : I1 {}
과
Class O2 : O1 , I2 {}
문제는 I2 구현 개체의 인스턴스가있을 때 해당 인터페이스를 통해 구현 된 메서드에 액세스하기 위해 I1로 캐스팅 할 수 있다는 것입니다. 코드에서 이것은 문제가 아니며 everythign이 예상대로 작동합니다.
유일한 문제는 해당 클래스에 대한 단위 테스트를 작성할 때 발생합니다.
인터페이스는 또한 구현 개체의 초기화 된 인스턴스를 IGetNewInstance 인터페이스로 캐스트하는 GetNewInstance라는 메서드를 노출합니다.
그러나 I2 유형의이 반환 된 개체를 I1로 캐스팅하려고하면 null 참조 결과가 나타납니다. 이는 I2를 구현하는 모의 개체가 I1을 상속하는 어떤 것도 상속하지 않기 때문입니다.
문제는 어떻게 모의 객체가 동시에 I1과 I2에서 상속되도록 할 수 있습니까?
내가 당신을 이해하는 방식으로, 당신은 두 개의 인터페이스를 구현하는 모의를 만들고 싶습니다. Moq를 사용하면 다음과 같이 간단합니다.
var mock = new Mock<IFoo>(); // Creates a mock from IFoo
mock.As<IBar>(); // Adds IBar to the mock
mock.As<IBar>().Setup(m => m.BarMethod()).Returns(new object()); // For setups.
이제 기대치를 설정하고 일반적으로 IFoo
및을 모두 구현하는 객체를 사용하는 것처럼 모의 객체를 사용할 수 있습니다 IBar
.
당신을 위해 GetNewInstance
방법, 당신은 단지 모의 자체를 반환하는 기대를 설정할 수 있습니다.
반응형
'Programing' 카테고리의 다른 글
SQL로 고유 한 레코드를 선택하는 방법 (0) | 2020.11.15 |
---|---|
Linux에서 분할 오류를 포착하는 방법은 무엇입니까? (0) | 2020.11.15 |
jQuery : 이벤트 핸들러 함수에서 이벤트 객체를 인수로 전달하지 않고 가져 오는 방법은 무엇입니까? (0) | 2020.11.15 |
git-ls-remote를 나열 할 때 태그 이름 뒤에 "^ {}"가있는 이유는 무엇입니까? (0) | 2020.11.15 |
`find -perm`을 사용하여 권한이 설정되지 않은 경우 찾기 (0) | 2020.11.15 |