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

Xunit의 [이론] 테스트에 복잡한 매개변수를 어떻게 전달할 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-30 05:59:09
원래의
534명이 탐색했습니다.

How Can I Pass Complex Parameters to Xunit's [Theory] Tests?

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

문자열, 정수, 복식과 같은 간단한 데이터 유형을 [이론] 테스트에 매개변수로 전달하는 것은 속성을 사용하여 간단합니다. 인라인데이터처럼. 그러나 보다 복잡한 매개변수의 경우 그러한 데이터를 어떻게 제공할 것인가에 대한 의문이 제기됩니다.

MemberData 속성

XUnit은 IEnumerable 재산. 각 객체[]는 [Theory] 메소드의 매개변수로 압축이 풀립니다.

예:

public class StringTests
{
    [Theory, MemberData(nameof(SplitCountData))]
    public void SplitCount(string input, int expectedCount)
    {
        Assert.Equal(expectedCount, input.Split(' ').Length);
    }

    public static IEnumerable<object[]> SplitCountData =>
        new List<object[]>
        {
            { "xUnit", 1 },
            { "is fun", 2 },
            { "to test with", 3 }
        };
}
로그인 후 복사

ClassData 속성

Xunit 2.0 이전에는 다음을 수행할 수 있었습니다. ClassData 속성을 사용하여 서로 다른 클래스의 테스트 간에 데이터 생성기를 공유합니다.

예:

public class StringTests
{
    [Theory, ClassData(typeof(IndexOfData))]
    public void IndexOf(string input, char letter, int expected)
    {
        Assert.Equal(expected, input.IndexOf(letter));
    }
}

public class IndexOfData : IEnumerable<object[]>
{
    // ... data and methods
}
로그인 후 복사

정적 멤버에 대한 MemberData 오버로드

Xunit 2.0 이상에서 MemberData는 MemberType 매개 변수를 사용하여 다른 클래스의 정적 멤버를 지정할 수 있습니다.

의 경우 예:

public class StringTests
{
    [Theory]
    [MemberData(nameof(IndexOfData.SplitCountData), MemberType = typeof(IndexOfData))]
    public void SplitCount(string input, int expectedCount)
    {
        Assert.Equal(expectedCount, input.Split(' ').Length);
    }
}
로그인 후 복사

또는 서로 분리하려는 경우 ClassData를 계속 사용할 수 있습니다. 데이터 생성기 및 테스트 방법.

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

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