繁体   English   中英

如何为继承另一个 class 的通用 class 编写 nunit 测试用例(c#)

[英]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");
   }
} 

仅当您的控制器都具有默认构造函数时,此方法才有效。

我熟悉 Rhino Mocks

var PartialMock = MockRepository.GeneratePartialMock(FileTypes.VEH);

和我们的 VEHExport class 扩展在此处输入图像描述

在此处输入图像描述 在此处输入图像描述

你可以在你的 Nunit 框架中有类似的外观,它应该在那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM