[英]How to write nunit test case(c#) for generic class which inherits another class
我正在尝试为一个通用 class 编写 Nunit 测试用例,如下所示。 但是我不知道我应该如何编写测试用例,因为像下面这样的编写甚至无法运行,有人可以帮忙吗?
我的主要 class 是这样的:-
public class TestController<T> : ControllerBase
{
private const string STATUS_OK_MESSAGE = "OK";
[HttpGet]
public ContentResult Get()
{
*** Some logic here *****
return Content(STATUS_OK_MESSAGE);
}
}
我尝试过的测试用例如下:-
[TestFixture]
public class Test1<T> where T : class
{
TestController testController;
[OneTimeSetUp]
public void OneTimeSetup()
{
testController= new TestController();
}
[Test]
public void Get()
{
var result = (ContentResult)testController.Get();
Assert.AreEqual("OK", "OK");
}
}
您不会在任何地方告诉 NUnit T
使用什么。 where
子句适用于编译器,而不适用于 NUnit。 因此,NUnit 无法构造您的夹具,因为它可能只为特定的T
构造。
更根本的是,在您的测试代码中,您没有使用T
。 如果 controller class 是通用的,那么您必须在代码中使用 TestController。 或者使用特定的 TestController 类型。
基本上,我们需要知道为什么您希望您的测试是通用的。 或者你是否真的这样做。 您的应用程序中是否有多个 TestController 类型? 还是只有一个? 如果只有一个,您根本不需要通用测试。
如果您编辑您的问题以解释更多您想要做的事情,我将在此处添加一些建议的代码。 但是您可能会尝试做几件不同的事情,并且每件事情的代码都不同。
更新
根据您需要多个控制器的信息,编写测试的一种方法是......
[TestFixture(typeof(TestController<Class1>)]
[TestFixture(typeof(TestController<Class2>)]
public class Test1<T> where T : ControllerBase, new()
{
T testController;
[OneTimeSetUp]
public void OneTimeSetup()
{
testController = new T();
}
[Test]
public void Get()
{
var result = (ContentResult)testController.Get();
Assert.AreEqual("OK", "OK");
}
}
仅当您的控制器都具有默认构造函数时,此方法才有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.