gpt4 book ai didi

c# - xUnit 将 Trait 添加到 CollectionDefinition

转载 作者:太空狗 更新时间:2023-10-29 23:50:03 26 4
gpt4 key购买 nike

在 xUnit 和 Visual Studio 中,我想在 Test Explorer 中对用 [Collection("DB")] 属性标记的测试进行分组。我只能通过 [Trait("Collection", "DB")] 属性对测试进行分组。有什么方法可以将特定的 Trait 分配给所有具有 [Collection("DB")] 属性的测试?

更新:我添加了 xUnit 问题 #799 .

最佳答案

复制自http://mac-blog.org.ua/xunit-category-trait/ .

using System;
using System.Collections.Generic;
using System.Linq;
using Xunit;
using Xunit.Abstractions;
using Xunit.Sdk;
using XunitCategoriesSample.Traits;

namespace XunitCategoriesSample.Traits
{
public class CategoryDiscoverer : ITraitDiscoverer
{
public const string KEY = "Category";

public IEnumerable<KeyValuePair<string, string>> GetTraits(IAttributeInfo traitAttribute)
{
var ctorArgs = traitAttribute.GetConstructorArguments().ToList();
yield return new KeyValuePair<string, string>(KEY, ctorArgs[0].ToString());
}
}

//NOTICE: Take a note that you must provide appropriate namespace here
[TraitDiscoverer("XunitCategoriesSample.Traits.CategoryDiscoverer", "XunitCategoriesSample")]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class CategoryAttribute : Attribute, ITraitAttribute
{
public CategoryAttribute(string category) { }
}
}

namespace XunitCategoriesSample
{
public class Class1
{
[Fact]
[Category("Jobsearcher")]
public void PassingTest()
{
Assert.Equal(4, Add(2, 2));
}

[Fact]
[Category("Employer")]
public void FailingTest()
{
Assert.Equal(5, Add(2, 2));
}

int Add(int x, int y)
{
return x + y;
}
}
}

注意您必须在 TraitDiscoverer 属性中提供正确的命名空间。

但这里还有更多,让我们制作更专业的属性:

public class JobsearcherTraitDiscoverer : ITraitDiscoverer
{
public const string VALUE = "Jobsearcher";

public IEnumerable<KeyValuePair<string, string>> GetTraits(IAttributeInfo traitAttribute)
{
yield return new KeyValuePair<string, string>(CategoryDiscoverer.KEY, VALUE);
}
}

[TraitDiscoverer("XunitCategoriesSample.Traits.JobsearcherTraitDiscoverer", "XunitCategoriesSample")]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class JobsearcherTraitAttribute : Attribute, ITraitAttribute
{
public JobsearcherTraitAttribute()
{
}
}

所以从现在开始,您只需输入 [JobsearcherTrait]

链接:

https://github.com/xunit/xunit/issues/394 - 讨论为什么 TraitAttribute 被标记为密封

https://github.com/xunit/samples.xunit/tree/master/TraitExtensibility - xunit 示例如何制作自定义属性

https://github.com/wespday/CategoryTraits.Xunit2 - 再来一个样本

https://github.com/xunit/xunit/blob/47fdc2669ae6aa28f6d642e202840193dfc7dbd7/test/test.xunit.execution/Common/TraitHelperTests.cs - 实现自定义属性的xunit测试示例

关于c# - xUnit 将 Trait 添加到 CollectionDefinition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com