我有这样的测试:
[Test, Combinatorial]
public void SomeTest(
[Values(false, true)] bool flag,
[Values(2, 5)] int someValue))
{
var entity = new SomeClass();
entity.Flag = flag;
entity.SomeValue = someValue;
var context = entity.GetContext();
Assert.AreEqual(context.SomeValue, entity.SomeValue);
}
当我尝试运行测试时,它会抛出TargetParameterCountException。 StackTrace:
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at NUnit.Core.Reflect.InvokeMethod(MethodInfo method, Object fixture, Object[] args)
at NUnit.Core.TestMethod.RunTestMethod(TestResult testResult)
at NUnit.Core.TestMethod.RunTestCase(TestResult testResult)
有什么问题?我使用Nunit 3.4.1和VS 2012。 简单的测试效果很好。
答案 0 :(得分:1)
您的代码很好,使用NUnit 3 Visual Studio适配器可以正常运行。基于callstack,您尝试在较旧的基于NUnit 2的适配器中运行代码。它是旧版本的Resharper或旧版本的NUnit Visual Studio Extension,在更新之前不会运行NUnit 3测试。
安装NUnit 3 Visual Studio adapter并尝试一下。如果您使用的是Resharper,则需要支付更新费用。
另外,pro-tip,您不需要在bool或枚举的属性中包含值,所有值都将自动注入。您也不需要Test
属性。
以下是我的示例的简化版
[Combinatorial]
public void SomeTest([Values] bool flag, [Values(2, 5)] int someValue)
{
TestContext.WriteLine($"{flag} - ${someValue}");
}
Visual Studio Adapter中的结果,