【问题标题】:Unit testing using Mock in MVC在 MVC 中使用 Mock 进行单元测试
【发布时间】:2016-04-20 05:48:14
【问题描述】:

我正在尝试为我的班级中的一个方法实施单元测试。如何在我正在测试的类方法上模拟基类索引器?下面的代码 sn-p 应该清楚地说明我的要求。

public class MyClass:MyBase
{
  public string returnString(string str1)
  {
     var xyz=base[str1];
     //My code to unit test is here
  }
}

public class MyBase
{
  public virtual string this[string str1]
  {
     return "prefix"+str1;
  }
}

我想用一个虚拟字符串来存根我的基类索引器并测试我的实际代码。我怎样才能做到这一点? 提前感谢您对此提供的任何帮助。

Sree。

【问题讨论】:

  • 包含您正在使用的模拟框架以及您在单元测试中尝试过的内容可能很有用。

标签: c# asp.net-mvc unit-testing mocking


【解决方案1】:

通常不推荐的做法,但在这种情况下“适当”:模拟您的测试类。当然,在这种情况下,您只会模拟出特定于基类的东西,并且不会以任何方式覆盖您的后代被测试。这确保了基类的行为被模拟,因此在测试后代的方法时受到测试的控制。

在您的示例中,您将创建 MyClass 的模拟,但仅模拟继承的(MyBase 的)构造函数,从而确保所有其他方法“按编码”运行,然后针对模拟的实例进行断言。

【讨论】:

    【解决方案2】:

    我看不出存根基类的原因,因为您可以模拟您的测试类。我会给你看。

    我在returnString()方法中添加了return语句,只是为了断言完成测试:

    public string returnString (string str1)
    {
        var xyz = base [str1];
        return xyz;
    }
    

    现在是测试:

    [TestMethod, Isolated]
    public void TestIndexerFake()
    {
        //Arrange
        var MyClassFake = Isolate.Fake.AllInstances<MyClass>(Members.CallOriginal);
        Isolate.WhenCalled(() => MyClassFake["test"]).WillReturn("fake!");
    
        //Act
        MyClass target = new MyClass();
        var result = target.returnString("test");
    
        //Assert
        Assert.AreEqual("fake!", result);
    }
    

    我正在使用Typemock Isolator 和 MsTest。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2015-09-16
      • 1970-01-01
      相关资源
      最近更新 更多