我可以制作一门结合理论和内联数据的课程吗?

问题描述 投票:0回答:1

我发现有很多次我编写了很多测试,其中我向其中注入了类似的东西,并且想要简化使用。让我们使用布尔值作为示例 - 但这只是代表问题。

目前,假设有大量不同事物的测试可以采用布尔值 - 你最终会写:

[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 的重点。 有什么办法可以做到这一点吗?

c# xunit
1个回答
0
投票

您的

TheoryBooleanAttribute : DataAttribute
版本提供数据,例如布尔真/假。

因此你仍然需要在方法上放置一个

[Theory]
属性。

例如

[Theory]
[TheoryBoolean]
public async Task TestWhatever( boolean value ) ...

AFAIK 无法将

TheoryAttribute
DataAttribute
组合成一个属性

我非常确定将

DataDiscoverer
属性应用于
TheoryAttribute
后代将不起作用,因为该属性专门应用于从
DataAttribute
派生的类。
XunitTestCaseDiscoverer
DataAttribute
的关系也是如此,因为它专门应用于
FactAttribute
派生类。

© www.soinside.com 2019 - 2024. All rights reserved.