> 백엔드 개발 > C++ > xUnit에서 이론 중심 단위 테스트에 복잡한 매개변수를 전달하는 방법은 무엇입니까?

xUnit에서 이론 중심 단위 테스트에 복잡한 매개변수를 전달하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-02 21:24:41
원래의
1002명이 탐색했습니다.

How to Pass Complex Parameters to Theory-Driven Unit Tests in xUnit?

이론 기반 단위 테스트에 복잡한 매개변수 전달

xUnit과 같은 단위 테스트 프레임워크는 데이터 기반 테스트를 위한 편리한 기능을 제공합니다. 그러나 테스트 중인 메서드에 대한 매개 변수가 사용자 정의 클래스 목록과 같은 복잡한 데이터 구조인 경우 InlineData 속성이 부족합니다.

복잡한 매개 변수 이론

이 문제를 해결하려면, xUnit은 이론 기반 단위 테스트에 복잡한 매개변수를 전달하기 위한 여러 옵션을 제공합니다. 그러한 옵션 중 하나가 MemberData 속성입니다.

MemberData to the Rescue

MemberData 속성을 사용하면 IEnumerable를 반환하는 속성이나 메서드를 지정할 수 있습니다. 이 시퀀스의 각 개체 배열은 각 테스트 인스턴스에 대한 매개변수를 나타냅니다. 예를 들면 다음과 같습니다.

[Theory, MemberData(nameof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}

public static IEnumerable<object[]> MyCustomData()
{
    // ...
}
로그인 후 복사

ClassData: 대체 접근 방식

xUnit 2.0 이전에는 ClassData라는 또 다른 대안이 있었습니다. MemberData와 유사하게 ClassData는 서로 다른 클래스와 네임스페이스의 테스트 간에 데이터 생성기를 공유할 수 있도록 허용했습니다. 예:

public class MyCustomTests
{
    [Theory, ClassData(typeof(MyCustomData))]
    public void WriteReportsToMemoryStream(...)
    {
        // ...
    }
}

public class MyCustomData : IEnumerable<object[]>
{
    // ...
}
로그인 후 복사

정적 멤버 오버로딩이 포함된 MemberData(xUnit >= 2.0)

xUnit 2.0은 다른 클래스의 정적 멤버를 직접 사용할 수 있는 오버로드된 MemberData 버전을 도입했습니다. 위의 ClassData 예제는 이 오버로드를 사용하여 다시 작성할 수 있습니다.

[Theory, MemberData(nameof(MyCustomData.GetData), MemberType = typeof(MyCustomData))]
public void WriteReportsToMemoryStream(...)
{
    // ...
}
로그인 후 복사

결론

이 예제에서는 MemberData, ClassData, 그리고 각각의 과부하. 이러한 속성을 활용하여 개발자는 복잡한 데이터 구조에서 작동하는 테스트 방법을 위한 데이터를 편리하게 생성할 수 있습니다.

위 내용은 xUnit에서 이론 중심 단위 테스트에 복잡한 매개변수를 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿