我正在尝试对以下控制器方法进行单元测试,
[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.
答案 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,第二个对阅读您的代码的人来说更加清楚。