如何将操作传递到测试用例中

Sac*_*nth 3 nunit

我有一个 NUnit 测试

[TestCase(...)]
public void test_name(Action onConfirm)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是在 TestCase 属性中将一个 Action 传递到这个测试中,但无论我尝试什么都会失败。我试着把

() => SomeDummyMethodIDefined()
Run Code Online (Sandbox Code Playgroud)

直接进入测试用例,但没有用。

我创建了一个动作

Action DummyAction = () => SomeDummyMethodIDefined();
Run Code Online (Sandbox Code Playgroud)

并将 DummyAction 传递到 TestCase 中,但这不起作用。

有没有办法做到这一点?

Jas*_*ans 5

这是一个非常粗略的例子,我的灵感来自阅读NUnit 文档 here

namespace NUnitLambda
{
    using System;
    using NUnit.Framework;

    [TestFixture]
    public class Class1
    {
        [Test]
        [TestCaseSource(typeof(SourceClass), "TestCases")]
        public void Foo(Action action)
        {
            action();
        }
    }

    public class SourceClass
    {
        private static Action t = () => Console.WriteLine("Hello World");

        public static Action[] TestCases = { t };
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试一下代码,希望你能从中得到你想要的。作为记录,我使用的是 NUnit 2.6。

编辑:

你也不必static在这里使用,例如

public class SourceClass
{
    private Action t = () => Console.WriteLine("Hello World");

    public Action[] TestCases;

    public SourceClass()
    {
        TestCases = new Action[1];

        TestCases[0] = t;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 多谢!在 C# 6.0 中,您可以使用 nameof(SourceClass.TestCases) 使其成为强类型。 (2认同)