属性不能在C++/CLI中重复,但在C#中可以正常吗?

And*_*ent 3 c# c++-cli xunit.net

我正在error C3095: 'Xunit::Extensions::InlineDataAttribute': attribute cannot be repeated使用C++/CLI代码而不是C#.

xUnit.net看起来像是我祷告的答案 - 一个现代的单元测试框架,GUI使用C++/CLI.但是,使用他们的参数化测试方法给出了错误C3095,如下所示.

有任何想法吗?

我正在使用最新的xUnit.net 1.6和Visual Studio 2008SP1.

using namespace Xunit;
using namespace Xunit::Extensions;

public ref class ParameterisedTestClass
{
public:

    [Theory]
    [InlineData("Kilroy", 6)]
    // uncomment to cause c3095 [InlineData("Jones", 5)]
    void PropTest(String^ msg, int msgLen)
    {
        Assert::Equal(msg->Length, msgLen);
    }
};
Run Code Online (Sandbox Code Playgroud)

C#中的等价物很好

using Xunit;
using Xunit.Extensions;

public  class ParameterisedTestClass
{

    [Theory]
    [InlineData("Kilroy", 6)]
    [InlineData("Jones", 5)]
    public void PropTest(String msg, int msgLen)
    {
        Assert.Equal(msg.Length, msgLen);
    }
};
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

我的猜测是,这是由于继承,其中一个编译器弄错了.

InlineDataAttribute继承自DataAttribute.现在DataAttribute声明允许多个实例:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
Run Code Online (Sandbox Code Playgroud)

InlineDataAttribute本身没有任何明确的AttributeUsage属性.我怀疑 C++编译器没有发现继承的AllowMultiple ...或者它可能不应该被继承.我找不到关于AttributeUsageAttribute它自身继承的任何详细文档- 虽然它有Inherited=true,所以我想它应该完全由InlineDataAttribute... 继承.


Mar*_*ell 6

嗯......我在这里这里看了defs ,下面复制它们(剪下来); AllowMultiplevia 的继承DataAttribute在C#中运行良好:

class Test
{
    [InlineData]
    [InlineData]
    static void Main() { }
}

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
class DataAttribute : Attribute {}

class InlineDataAttribute : DataAttribute { }
Run Code Online (Sandbox Code Playgroud)

因此,如果它不适用于C++/CLI,我猜C++/CLI根本就不处理隐含的[AttributeUsage].您应该针对Xunit提出请求,要求他们[AttributeUsage]明确指示InlineDataAttribute.