>백엔드 개발 >C++ >XUnit의 [이론] 메서드에 복잡한 매개변수를 어떻게 전달할 수 있나요?

XUnit의 [이론] 메서드에 복잡한 매개변수를 어떻게 전달할 수 있나요?

DDD
DDD원래의
2025-01-04 14:50:39295검색

How Can I Pass Complex Parameters to XUnit's [Theory] Methods?

복잡한 매개변수를 [이론]에 전달

XUnit은 사용자가 간단한 데이터 매개변수로 여러 테스트를 생성할 수 있는 InlineData 속성을 제공합니다. 그러나 사용자 정의 클래스 목록과 같은 더 복잡한 매개변수를 처리할 때는 다른 접근 방식이 필요합니다.

MemberData 및 ClassData 속성

XUnit은 다음과 같은 여러 옵션을 제공합니다. [Theory] 메서드에 복잡한 매개변수를 전달합니다. 한 가지 접근 방식은 MemberData 속성을 활용하는 것입니다. 이 속성은 IEnumerable를 반환하는 속성을 실행하도록 XUnit에 지시합니다. IEnumerable의 각 object[]는 [Theory] 메서드에 대한 단일 호출에 대한 매개 변수로 "압축 해제"됩니다.

또 다른 옵션은 ClassData 특성을 사용하는 것입니다. ClassData는 MemberData와 유사하게 작동하지만 서로 다른 클래스 또는 네임스페이스의 테스트 간에 데이터 생성기를 공유할 수 있습니다. 또한 '데이터 생성기'를 실제 테스트 방법과 분리합니다.

정적 멤버를 지원하는 ClassData 예제

정적 멤버를 지원하는 ClassData를 사용하려면 다음을 정의할 수 있습니다. 아래와 같이 IEnumerable를 반환하는 정적 속성이 있는 클래스:

public class IndexOfData
{
    public static IEnumerable<object[]> SplitCountData => 
        new List<object[]>
        {
            new object[] { "hello world", 'w', 6 },
            new object[] { "goodnight moon", 'w', -1 }
        };
}

In 테스트 클래스에 [Theory] 특성을 적용하고 해당 특성의 MemberType 속성을 사용하여 정적 멤버를 지정할 수 있습니다.

[Theory, MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
public void IndexOf(string input, char letter, int expected) {...}

이러한 특성을 활용하여 [Theory]에 복잡한 매개변수를 전달할 수 있습니다. 방법을 통해 다양한 시나리오를 효율적으로 테스트할 수 있습니다.

위 내용은 XUnit의 [이론] 메서드에 복잡한 매개변수를 어떻게 전달할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.