Nullean.Xunit.Partitions 0.5.0

dotnet add package Nullean.Xunit.Partitions --version 0.5.0                
NuGet\Install-Package Nullean.Xunit.Partitions -Version 0.5.0                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Nullean.Xunit.Partitions" Version="0.5.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以便引用包。
paket add Nullean.Xunit.Partitions --version 0.5.0                
#r "nuget: Nullean.Xunit.Partitions, 0.5.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互式工具或脚本的源代码中以便引用包。
// Install Nullean.Xunit.Partitions as a Cake Addin
#addin nuget:?package=Nullean.Xunit.Partitions&version=0.5.0

// Install Nullean.Xunit.Partitions as a Cake Tool
#tool nuget:?package=Nullean.Xunit.Partitions&version=0.5.0                

Nullean.Xunit.Partitions

<a href="https://nuget.net.cn/packages/Nullean.Xunit.Partitions/"><img src="https://img.shields.io/nuget/v/Nullean.Xunit.Partitions?color=blue&style=plastic" /></a>

<img src="https://github.com/nullean/xunit-partitions/raw/main/nuget-icon.png" align="right" title="Logo " width="220" height="220">

一个引入“分区”概念的 XunitTestFramework 实现。

IPartitionFixture{TLifetime} 允许测试注入一个长生存期对象以共享。

与 xUnit 的 ICollectionFixture{TFixture} 相比,只有单个分区会在同一时间运行。然而,与其他库的 ICollectionFixture{TFixture} 不同,此库的 IPartitionFixture{TLifetime} 并不会标记为并发障碍,属于单个 分区 的测试仍然可以并发运行。

实际上,每个 IPartitionFixture{TLifetime} 都可以通过 IPartitionLifetime.MaxConcurrency 声明其自己的期望并发。

如果您想在数千次测试中共享几个(比如说 0-20)长运行的对象,这个库将适用于您。如果您有很多测试集合,每个集合中只有几个测试,那么 xUnit 本地集合将更适合。

因为每个分区仅在测试运行前后调用 InitializeAsyncDisposeAsync,这使得它比可能启动过早且关闭过晚的集合固定程序更适合。

设置

在您的测试项目中任何位置提供以下程序集级别属性。

using Nullean.Xunit.Partitions;
using Xunit;
[assembly: TestFramework(Partition.TestFramework, Partition.Assembly)]

这将确保 xUnit 引导程序引导本库中提供的分区测试框架。

提供选项

可以通过类似的 PartitonOptions 程序集级别属性提供控制分区测试框架的选项。

在这里,您可以控制过滤器以仅运行某些分区和/或测试。

Setup.cs
using Nullean.Xunit.Partitions;
using My.Tests;
using Xunit;

[assembly: TestFramework(Partition.TestFramework, Partition.Assembly)]
//optional only needed if you want to specify execution options to PartitionTestFramework
[assembly: PartitionOptions(typeof(MyPartitioningOptions))]

namespace My.Tests;

/// <summary> Allows us to control the xunit partitioning test pipeline </summary>
public class MyPartitioningOptions : PartitionOptions
{
	public MyPartitioningOptions()
	{
		PartitionFilterRegex = "LongLivedObject";
		TestFilterRegex = null;
	}
}

使用方法

namespace Nullean.Xunit.Partitions.Tests;


public class NoStateClass
{
	[Fact]
	public void SimpleTest() => 1.Should().Be(1);
}

public class LongLivedObject : IPartitionLifetime
{
	private static long _initialized;
	private static long _disposed;

	public long Initialized => _initialized;
	public long Disposed => _disposed;

	public Task InitializeAsync()
	{
		Interlocked.Increment(ref _initialized);
		return Task.CompletedTask;
	}

	public Task DisposeAsync()
	{
		Interlocked.Increment(ref _disposed);
		return Task.CompletedTask;
	}

	public int? MaxConcurrency => null;
}

public class SharedState1Class(LongLivedObject longLivedObject) : IPartitionFixture<LongLivedObject>
{
	[Fact]
	public void StaticInitializedShouldNotIncrease() => longLivedObject.Initialized.Should().Be(1);

	[Fact]
	public void DisposeShouldNotHaveHappened() => longLivedObject.Disposed.Should().Be(0);
}

public class SharedState2Class(LongLivedObject longLivedObject) : IPartitionFixture<LongLivedObject>
{
	[Fact]
	public void StaticInitializedShouldNotIncrease() => longLivedObject.Initialized.Should().Be(1);

	[Fact]
	public void DisposeShouldNotHaveHappened() => longLivedObject.Disposed.Should().Be(0);
}

SharedState1ClassSharedState2Class 都依赖于 LongLivedObject,因此将在 InitializeAsync 运行后接收单个共享实例。每个 测试的 将会并行运行。

DisposeAsync 将在下一个分区的状态 InitializeAsync 运行之前运行

NoStateClass 不属于任何分区。所有无分区的测试都将被视为空分区的组成部分。所有这些测试也将并行运行。

然而,按照设计,不会有两个分区同时运行。

这允许分区的状态在隔离环境下运行昂贵的操作(例如启动 Docker 容器、进程、引导 playwright 状态)。

产品 兼容和附加计算的目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 兼容。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
更多信息请访问 目标框架.NET Standard

NuGet 包 (1)

显示依赖 Nullean.Xunit Partitions 的前 1 个 NuGet 包

下载
Elastic.Elasticsearch.Xunit

提供了一个 Xunit 测试框架,允许您针对本地短暂 Elasticsearch 集群运行集成测试

GitHub 仓库

此包未由任何流行 GitHub 仓库使用。

版本 下载 最后更新
0.5.0 2,387 2/22/2024
0.4.3 244 2/13/2024
0.4.2 119 2/9/2024
0.4.1 91 2/9/2024
0.4.0 105 2/9/2024
0.3.0 114 2/9/2024