NUnit:以复杂对象作为测试方法参数的单元测试

时间:2018-07-09 13:53:45

标签: unit-testing nunit

我正在尝试对以下控制器方法进行单元测试,

[TestFixture]
public class HomeControllerTests
{
    static object[] TestData =
    {
        new object[] { new EmployeeAgreementRequest(), 1, 4 }
    };

    [Test, TestCaseSource("TestData")]
    public void AgreetoParticipate(EmployeeAgreementRequest employeeAgreementRequest, int brandID, int employeeID)
    {
        HomeController controller = new HomeController();
        IHttpActionResult actionResult = controller.AgreeToParticipateInSP(employeeAgreementRequest, brandID, employeeID);
        var contentResult = actionResult as OkNegotiatedContentResult<Boolean>;
        NUnit.Framework.Assert.IsNotNull(contentResult.Content);
        NUnit.Framework.Assert.AreEqual(true, contentResult.Content);
    }
}

当我说调试测试时,这种方法没有被采用。请让我知道我在这里想念什么。

也请让我知道这是否是使用多个测试数据运行测试方法的正确方法。

Visual Studio输出:

No tests found to run.

1 个答案:

答案 0 :(得分:1)

您的源数据格式不正确。标记为[TestCaseSource]的字段应包含一个IEnumerable,每个枚举项都构成一个测试用例。在您的代码中,object[]提供了枚举并包含三个单独的测试用例,每个用例都有一个自变量。显然,这不是您的意图,您只有一个带有三个参数的测试用例。

如果您使用其他跑步者,例如控制台运行程序,您将看到一条错误消息。由于测试浏览器的工作方式,尽管在输出窗口中可能会有来自NUnit的日志消息,但您在那里看不到它。

您的测试用例的正确格式如下:

static object[] TestData = new object[]
{
    new object[] { new EmployeeAgreementRequest(), 1, 4 }
};

或者...

static TestCaseData[] TestData = new TestCaseData[]
{
    new TestCaseData( new EmployeeAgreementRequest(), 1, 4)
};

IMO,第二个对阅读您的代码的人来说更加清楚。