xunit.assemblyfixture 2.2.0
dotnet add package xunit.assemblyfixture --version 2.2.0
NuGet\Install-Package xunit.assemblyfixture -Version 2.2.0
<PackageReference Include="xunit.assemblyfixture" Version="2.2.0" />
paket add xunit.assemblyfixture --version 2.2.0
#r "nuget: xunit.assemblyfixture, 2.2.0"
// Install xunit.assemblyfixture as a Cake Addin #addin nuget:?package=xunit.assemblyfixture&version=2.2.0 // Install xunit.assemblyfixture as a Cake Tool #tool nuget:?package=xunit.assemblyfixture&version=2.2.0
xunit.assemblyfixture
为同一组件内的测试提供共享状态/固定数据,遵循 类固定数据 设计(而不是更复杂集合固定数据)。
为了补充 xUnit 文档样式,我毫不客气地将它的布局复制到这里。
注意:仅适用于 xunit 2.4。3.0+ 将拥有自己的方式处理此功能。
测试间的共享上下文
请阅读 xUnit 文档 了解共享上下文和各内置选项,这些选项包括:
- 构造函数和Dispose(共享设置/清理代码,而无需共享对象实例)
- 类固定数据(在单个类中的测试之间共享对象实例)
- 集合固定数据(在多个测试类之间共享对象实例)
对此项目添加以下内容:
- 组件固定数据(在同一个测试组件内的多个测试类之间共享对象实例)
组件固定数据
何时使用:当你想要创建单个组件级别的上下文,并在组件中的所有测试中共享它,并在组件中的所有测试完成后清理它时。
有时测试上下文的创建和清理可能非常昂贵。如果你在每次测试期间运行创建和清理代码,可能会使测试比预期要慢。有时,你只需要在多个测试中聚合多个类的数据。你可以使用[xUnit.net 组件固定装置](https://nuget.net.cn/packages/xunit.assemblyfixture)的特性来在测试组件中的所有测试之间共享单个对象实例。
当使用组件固定装置时,xUnit.net将确保在所有使用该装置的测试运行之前创建装置实例,一旦所有测试完成,它将通过调用Dispose
(如果存在)清理装置对象。
要使用组件固定装置,你需要采取以下步骤
- 创建装置类,并在装置类的构造函数中放入启动代码。
- 如果装置类需要执行清理,则在装置类中实现
IDisposable
,并将清理代码放在Dispose
方法中。 - 将
IAssemblyFixture<TFixture>
添加到测试类中。 - 如果测试类需要访问装置实例,将其添加为构造函数参数,它将自动提供。
以下是一个简单的示例
public class DatabaseFixture : IDisposable
{
public DatabaseFixture()
{
Db = new SqlConnection("MyConnectionString");
// ... initialize data in the test database ...
}
public void Dispose()
{
// ... clean up test data from the database ...
}
public SqlConnection Db { get; private set; }
}
public class MyDatabaseTests : IAssemblyFixture<DatabaseFixture>
{
DatabaseFixture fixture;
public MyDatabaseTests(DatabaseFixture fixture)
{
this.fixture = fixture;
}
// ... write tests, using fixture.Db to get access to the SQL Server ...
}
在一个组件的第一个测试执行DatabaseFixture
之前,xUnit.net将创建一个DatabaseFixture
的实例。随后每个测试都会接收到相同的共享实例,并将其传递给MyDatabaseTests
的构造函数,就像一个静态单例,但通过IDisposable
实现了可预测的清理。
重要提示: xUnit.net使用接口IAssemblyFixture<>
的存在来知道你想要创建并清理组件固定装置。无论你是否将类实例作为构造函数参数传递,它都会这样做。同样,如果你添加了构造函数参数但忘记了添加接口,xUnit.net将告诉你它不认识如何满足构造函数参数。
如果你需要多个装置对象,你可以根据需要多次实拟该接口,并为需要访问的装置对象实例添加构造函数参数。构造函数参数的顺序无关紧要。
注意你不可以控制装置对象创建的顺序,且装置不能依赖其他装置。如果你需要控制创建顺序,或者装置之间存在依赖关系,你应该创建一个类来封装其他两个装置,这样它就可以执行对象创建了。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.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 已计算。 |
-
.NETStandard 2.0
- xunit (>= 2.4.2)
- xunit.abstractions (>= 2.0.3)
NuGet 包
此包未由任何 NuGet 包使用。
GitHub 仓库 (2)
显示依赖于 xunit.assemblyfixture 的最受欢迎的前 2 个 GitHub 仓库
仓库 | 星级 |
---|---|
coverlet-coverage/coverlet
Cross platform code coverage for .NET
|
|
jwaliszko/ExpressiveAnnotations
基于注解的条件验证库。
|