Programing

MOQ-다른 인터페이스로 캐스팅해야하는 인터페이스를 모의하는 방법은 무엇입니까?

lottogame 2020. 11. 15. 10:48
반응형

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방법, 당신은 단지 모의 자체를 반환하는 기대를 설정할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/3503974/moq-how-to-mock-an-interface-that-needs-to-be-cast-to-another-interface

반응형