我发现有很多次我编写了很多测试,其中我向其中注入了类似的东西,并且想要简化使用。让我们使用布尔值作为示例 - 但这只是代表问题。
目前,假设有大量不同事物的测试可以采用布尔值 - 你最终会写:
[Theory]
[InlineData( false )]
[InlineData( true )]
public async Task TestWhatever( boolean value ) ...
这看起来有点可笑。我真的很想创建一个名为 TheoryBooleanAttribute 的属性,这样我就可以做到
[TheoryBoolean]
public async Task TestWhatever( boolean value ) ...
但我不知道该怎么做。如果我这样做:
[DataDiscoverer("Xunit.Sdk.DataDiscoverer", "xunit.core")]
public class TheoryBooleanAttribute : TheoryAttribute
我收到一条消息,说我需要提供某种 classData、InlineData 等 - 我本以为这是 datadiscover 属性的重点。如果我这样做:
[XunitTestCaseDiscoverer("Xunit.Sdk.TheoryDiscoverer", "xunit.execution.{Platform}")]
public class TheoryBooleanAttribute : DataAttribute
GUI 不再将其视为测试。 - 这似乎是 XunitTestCaseDiscoverAttribute 的重点。 有什么办法可以做到这一点吗?
您的
TheoryBooleanAttribute : DataAttribute
版本提供数据,例如布尔真/假。
因此你仍然需要在方法上放置一个
[Theory]
属性。
例如
[Theory]
[TheoryBoolean]
public async Task TestWhatever( boolean value ) ...
AFAIK 无法将
TheoryAttribute
和 DataAttribute
组合成一个属性
我非常确定将
DataDiscoverer
属性应用于 TheoryAttribute
后代将不起作用,因为该属性专门应用于从 DataAttribute
派生的类。 XunitTestCaseDiscoverer
与 DataAttribute
的关系也是如此,因为它专门应用于 FactAttribute
派生类。