【问题标题】:How to write nunit test case(c#) for generic class which inherits another class如何为继承另一个类的泛型类编写 nunit 测试用例(c#)
【发布时间】:2021-04-02 07:23:02
【问题描述】:

我正在尝试为一个通用类编写 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");
   }
} 

 

【问题讨论】:

    标签: c# .net unit-testing nunit


    【解决方案1】:

    你并没有告诉任何地方的 NUnit T 使用什么。 where 子句适用于编译器,而不适用于 NUnit。因此,NUnit 无法构造您的fixture,因为它可能只为特定的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");
       }
    } 
    

    这种方法只有在你的控制器都具有默认构造函数时才有效。

    【讨论】:

    • 嗨@Charlie 感谢您的回复。是的,所以我有不止一种 TestController 类型,并且肯定需要泛型类型。如果您可以为此提供一些示例测试用例,那将非常有帮助。
    【解决方案2】:

    我对 Rhino Mocks 很熟悉

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

    我们的 VEHExport 类扩展了

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

    【讨论】:

    • 嗨@Anish Sinha。谢谢您的回复。好的,肯定会尝试为 Nunit 搜索类似的内容
    猜你喜欢
    • 2014-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多