c# - 如何为继承另一个类的泛型类编写 nunit 测试用例(c#)
问题描述
我正在尝试为一个通用类编写 Nunit 测试用例,如下所示。但是我不知道我应该如何编写测试用例,因为像下面这样的编写甚至无法运行,有人可以帮忙吗?
我的主要课程是:-
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
. 如果控制器类是通用的,那么您将不得不在代码中使用 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");
}
}
仅当您的控制器都具有默认构造函数时,此方法才有效。
推荐阅读
- alexa - Alexa APL Pager OnPageChanged 事件仅通过触摸触发
- python - Python:在内部嵌套类中使用外部类的 self.variable
- php - composer.lock 如何保护你的项目的恶意依赖
- python - Python 模拟 TCP 套接字以进行单元测试的方法
- sql - 如何在 SQL 中找到第二和第三高薪水?
- angular - 在输入中打印 JSON 数据,角度
- jq - JQ如何将数组加入一行?
- spring-boot - log.error() 没有记录严重性错误,而是记录信息
- android - 程序多次执行一行代码
- php - 为 eloquent 模型添加属性