我可以创建一个结合理论和内联数据的类吗?

can I make a class that combines theory and inlinedata?

提问人:Darren Oakey 提问时间:11/6/2023 最后编辑:Ken WhiteDarren Oakey 更新时间:11/6/2023 访问量:47

问:

我发现有很多次我写了很多测试,我把类似的东西注入其中,并希望简化使用。让我们以布尔值为例 - 但它只是代表了问题。

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

[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

我收到一条消息,说我需要提供某种类数据,InlineData等 - 我本来以为这是datadiscover属性的重点。如果我这样做:

[XunitTestCaseDiscoverer("Xunit.Sdk.TheoryDiscoverer", "xunit.execution.{Platform}")]
public class TheoryBooleanAttribute : DataAttribute

GUI 不再将其视为测试。- 这似乎是 XunitTestCaseDiscoverAttribute 的重点。 有什么办法可以做到这一点吗?

C# xunit

评论


答:

0赞 Perringaiden 11/6/2023 #1

您的版本提供数据,例如布尔值 True/False。TheoryBooleanAttribute : DataAttribute

因此,您仍然需要在方法上放置一个属性。[Theory]

例如

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

AFAIK 没有办法将 a 和 a 组合成一个属性TheoryAttributeDataAttribute

我很确定将该属性应用于后代是行不通的,因为该属性专门应用于派生自 .反对 a 也是如此,因为它专门应用于派生类。DataDiscovererTheoryAttributeDataAttributeXunitTestCaseDiscovererDataAttributeFactAttribute

评论

0赞 Darren Oakey 11/10/2023
你的 AFAIK 是问题的重点 - 我正在寻找一种方法将它们组合成一个属性。我确实想出了一种方法——那就是在编译时使用织布机重新探测它们——但我仍然希望找到一些不那么严重的东西