단위 테스트에서 모의 확장 방법: 실용적인 접근 방식
단위 테스트에는 종종 모의 확장 메서드가 필요한 경우가 있는데, 이는 Moq의 직접적인 지원 부족으로 인해 처음에는 문제가 있는 것으로 보이는 작업입니다. 이는 확장 메서드의 특성에서 비롯됩니다. 기본적으로 기존 클래스를 확장하는 정적 메서드입니다. 그러나 Moq는 주로 정적 메서드가 아닌 객체 인스턴스를 모의합니다.
해결책은 확장 메서드가 클래스에 기능을 추가한다는 점을 이해하는 데 있습니다. 따라서 확장 메소드 자체를 모의하는 대신 target 클래스
를 모의합니다.일반적인 시나리오를 살펴보겠습니다.
<code class="language-csharp">public class SomeType { public int Id { get; set; } } // ... (Extension method definition elsewhere) ...</code>
제공된 예제는 FirstOrDefault
에 적용된 List<SomeType>
확장 메서드를 모의해야 함을 보여줍니다. FirstOrDefault
을 직접 조롱하는 대신 List<SomeType>
:
<code class="language-csharp">var listMock = new Mock<List<SomeType>>(); listMock.Setup(l => l.FirstOrDefault(st => st.Id == 5)) .Returns(new SomeType { Id = 5 });</code>
이 설정을 사용하면 지정된 조건자와 함께 호출될 때 FirstOrDefault
확장 메서드의 반환 값을 정의할 수 있습니다. 우리는 목록 객체의 모의를 통해 간접적으로 동작을 제어하고 있습니다.
이 기술은 Moq의 한계를 효과적으로 우회하여 확장 메서드와 관련된 시나리오를 포함하는 포괄적인 단위 테스트를 가능하게 합니다. 확장 메서드가 작동하는 객체를 모의하는 데 집중함으로써 해당 동작을 제어하고 강력한 테스트 적용 범위를 달성할 수 있습니다.
위 내용은 Moq가 직접 지원하지 않는 확장 메서드를 어떻게 모의할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!