TL;DR - 我正在寻找 xUnit 的 MSTest 等效项AssemblyInitialize
(又名我喜欢的唯一功能)。
具体来说,我正在寻找它,因为我有一些硒烟雾测试,我希望能够在没有其他依赖项的情况下运行这些测试。我有一个 Fixture 可以为我启动 IisExpress 并在处置时杀死它。但是在每次测试之前执行此操作会极大地增加运行时间。
我想在测试开始时触发此代码一次,并在最后处理它(关闭进程)。我该怎么做呢?
即使我可以通过编程访问“当前正在运行多少个测试”之类的内容,我也可以弄清楚一些事情。
截至 2015 年 11 月,xUnit 2 已发布,因此有一种在测试之间共享功能的规范方法。有记录here.
基本上你需要创建一个类来执行固定装置:
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; }
}
一个虚拟类承载CollectionDefinition
属性。
此类允许 Xunit 创建测试集合,并将为该集合的所有测试类使用给定的固定装置。
[CollectionDefinition("Database collection")]
public class DatabaseCollection : ICollectionFixture<DatabaseFixture>
{
// This class has no code, and is never created. Its purpose is simply
// to be the place to apply [CollectionDefinition] and all the
// ICollectionFixture<> interfaces.
}
然后,您需要在所有测试类上添加集合名称。
测试类可以通过构造函数接收夹具。
[Collection("Database collection")]
public class DatabaseTestClass1
{
DatabaseFixture fixture;
public DatabaseTestClass1(DatabaseFixture fixture)
{
this.fixture = fixture;
}
}
它比 MsTests 更详细一些AssemblyInitialize
因为您必须在每个测试类上声明它属于哪个测试集合,但它也更具可模块化性(并且使用 MsTests,您仍然需要在您的类上放置一个 TestClass)
注:样品取自文档.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)