是否可以跳过特殊测试的 AssemblyInitialize 属性?
Is it possible to skip the AssemblyInitialize attribute for special tests?
我有两个测试:BooUnitTest
和 BooIntegrationTest
。
在同一个测试项目中,我持有一个带有 AssemblyInitialize
属性装饰器的方法:
AssemblyTestsHandler.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class AssemblyTestsHandler
{
[AssemblyInitialize]
public static async Task Bootstrap()
{
//Do complex stuff...
}
}
是否可以使 Bootstrap 方法仅适用于 BooIntegrationTest
而不适用于 FooUnitTest
?
例如
FooTests.cs
:
[TestClass]
public class FooTests
{
[TestMethod]
public async Task FooUnitTest()
{
//Skip Bootstrap()!!
}
}
BooTests.cs
[TestClass]
public class BooTests
{
[TestMethod]
public async Task BooIntegrationTest()
{
//Do Not Skip Bootstrap()!!
}
}
项目结构如下:
TestingProject
-AssemblyTestsHandler.cs
-BooTests.cs
-FooTests.cs
不,你不能。 AssemblyInitialize
每个程序集将被调用一次,它将在所有其他方法 (AssemblyInitializeAttribute Class) 之前被调用:
The method marked with this attribute will be run before methods
marked with the ClassInitializeAttribute, TestInitializeAttribute, and
TestMethodAttribute attributes. Only one method in an assembly may be
decorated with this attribute.
实际上单元测试应该以随机顺序执行:
- FooUnitTest1
- BooIntegrationTest2
- FooUnitTest2
- BooIntegrationTest1
在这种情况下,任何静态初始化都会影响所有其他单元测试。
我觉得,有两种可能:
- 您可以为
FooTests
使用 TestInitialize
和 TestCleanup
属性。但这会影响性能
- 您可以将
ClassInitialize
用于 BooTests
,但在这种情况下,您必须与单元测试分开触发集成测试。集成测试和单元测试可以通过 TestCathegory
属性来区分。
我有两个测试:BooUnitTest
和 BooIntegrationTest
。
在同一个测试项目中,我持有一个带有 AssemblyInitialize
属性装饰器的方法:
AssemblyTestsHandler.cs
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class AssemblyTestsHandler
{
[AssemblyInitialize]
public static async Task Bootstrap()
{
//Do complex stuff...
}
}
是否可以使 Bootstrap 方法仅适用于 BooIntegrationTest
而不适用于 FooUnitTest
?
例如
FooTests.cs
:
[TestClass]
public class FooTests
{
[TestMethod]
public async Task FooUnitTest()
{
//Skip Bootstrap()!!
}
}
BooTests.cs
[TestClass]
public class BooTests
{
[TestMethod]
public async Task BooIntegrationTest()
{
//Do Not Skip Bootstrap()!!
}
}
项目结构如下:
TestingProject
-AssemblyTestsHandler.cs
-BooTests.cs
-FooTests.cs
不,你不能。 AssemblyInitialize
每个程序集将被调用一次,它将在所有其他方法 (AssemblyInitializeAttribute Class) 之前被调用:
The method marked with this attribute will be run before methods marked with the ClassInitializeAttribute, TestInitializeAttribute, and TestMethodAttribute attributes. Only one method in an assembly may be decorated with this attribute.
实际上单元测试应该以随机顺序执行:
- FooUnitTest1
- BooIntegrationTest2
- FooUnitTest2
- BooIntegrationTest1
在这种情况下,任何静态初始化都会影响所有其他单元测试。
我觉得,有两种可能:
- 您可以为
FooTests
使用TestInitialize
和TestCleanup
属性。但这会影响性能 - 您可以将
ClassInitialize
用于BooTests
,但在这种情况下,您必须与单元测试分开触发集成测试。集成测试和单元测试可以通过TestCathegory
属性来区分。