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)
我的猜测是,这是由于继承,其中一个编译器弄错了.
InlineDataAttribute继承自DataAttribute.现在DataAttribute声明允许多个实例:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
Run Code Online (Sandbox Code Playgroud)
但InlineDataAttribute本身没有任何明确的AttributeUsage属性.我怀疑 C++编译器没有发现继承的AllowMultiple ...或者它可能不应该被继承.我找不到关于AttributeUsageAttribute它自身继承的任何详细文档- 虽然它有Inherited=true,所以我想它应该完全由InlineDataAttribute... 继承.
嗯......我在这里和这里看了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.