전체 [xUnit.net]에서 한 번만 초기화 처리할 정의

10422 단어 .NETC#xunittech
테스트를 할 때, 나는 전체 조립에서 최초로 한 번만 뛰는 초기화 처리를 쓰고 싶었다.나는 그 방법을 총결산할 것이다.
이 기사의 대상은NET Core 3.1 또는NET5.테스트의 프레임워크는 xUnit.net입니다.
.NET Core 이후 개인은 다음과 같은 장면이 필요할 때가 있다[1].예를 들어 진행하다.
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
https://docs.microsoft.com/en-us/dotnet/api/system.text.codepagesencodingprovider.instance?view=net-5.0
다음은 수행하고자 하는 테스트의 예[2].Encoding.RegisterProvider의 준비 없이 집행하면 실패할 수 있다.
MyTest.cs
using Microsoft.VisualBasic;
using Xunit;

public class MyTest
{
    [Fact]
    public void Test()
    {
        var result = Strings.StrConv("1", VbStrConv.Narrow);
	Assert.Equal("1", result);
    }
}

1. IClassFixture


https://xunit.net/docs/shared-context
xUnit.net의 유파를 따르는 방법.매번 시험반이 증가IClassFixture할 때마다 번거롭거나 잊어버리기 쉬운 단점이 있다.
EncodingFixture.cs
public class EncodingFixture
{
    public EncodingFixture()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    }
}
MyTest.cs
public class MyTest : IClassFixture<EncodingFixture>
{
    [Fact]
    public void Test()
    {
        var result = Strings.StrConv("1", VbStrConv.Narrow);
	Assert.Equal("1", result);
    }
}

2. Xunit.DependencyInjection


다음 NuGet을 참조하십시오.
https://www.nuget.org/packages/Xunit.DependencyInjection
https://github.com/pengweiqhca/Xunit.DependencyInjection
자세한 사항은 지아이허브의 README 등을 보시고, 평소 제네릭 호스트 스타일로 제작Startup반을 만들면 가장 먼저 불러낸다.
로거와 단식 서비스 등은 조정 가능한 범위가 넓다[3].그런 걸 변경하고 싶으면 나도 같이 Encoding.RegisterProvider 가입하는 게 좋아.타사 누겟을 추가하려면 억지로 말하기가 어렵다.
Startup.cs
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    }
}

3. [ModuleInitializer]


C#9.0 추가 사양입니다.NET5 이후에는 사용 가능합니다.이 방법은 원래 시험에 국한되지 않고 사용할 수 있다.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/module-initializers
이번 예Encoding.RegisterProvider라면 가장 가벼운 것 같아요.
Initializer.cs
internal static class Initializer
{
    [ModuleInitializer]
    public static void Initialize()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    }
}
각주
Windows 명령 프롬프트로 내보낼 때StrConv를 사용할 때 등등.↩︎
Microsoft.VisualBasic.NET Core는 나중에 NuGet에서 가져올 수 있습니다.https://www.nuget.org/packages/Microsoft.VisualBasic/ ↩︎
하나의 예로 테스트 시ITestOutputHelper에만 기록기에 등록하는 용도 등이 있다.직접 XunitDependency Injection을 사용하지 않았지만 참고 가치가 있는 글: https://www.meziantou.net/how-to-get-asp-net-core-logs-in-the-output-of-xunit-tests.htm↩︎

좋은 웹페이지 즐겨찾기