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
<PackageReference Include="Nullean.Xunit.Partitions" Version="0.5.0" />
paket add Nullean.Xunit.Partitions --version 0.5.0
#r "nuget: Nullean.Xunit.Partitions, 0.5.0"
// 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 本地集合将更适合。
因为每个分区仅在测试运行前后调用 InitializeAsync
和 DisposeAsync
,这使得它比可能启动过早且关闭过晚的集合固定程序更适合。
设置
在您的测试项目中任何位置提供以下程序集级别属性。
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);
}
SharedState1Class
和 SharedState2Class
都依赖于 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 已计算。 |
-
.NETFramework 4.6.2
- Microsoft.TestPlatform.ObjectModel (>= 16.6.1)
- xunit (>= 2.4.1)
-
.NETStandard 2.0
- xunit (>= 2.4.1)
-
.NETStandard 2.1
- xunit (>= 2.4.1)
NuGet 包 (1)
显示依赖 Nullean.Xunit Partitions 的前 1 个 NuGet 包
包 | 下载 |
---|---|
Elastic.Elasticsearch.Xunit 提供了一个 Xunit 测试框架,允许您针对本地短暂 Elasticsearch 集群运行集成测试 |
GitHub 仓库
此包未由任何流行 GitHub 仓库使用。