在 MVC 中使用 Mock 进行单元测试

本文关键字:单元测试 Mock MVC | 更新日期: 2024-10-26 04:28:48

我正在尝试为类中的方法实现单元测试。如何在我正在测试的类方法上模拟基类索引器?下面的代码片段应该清楚地说明我的要求。

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;
  }
}

我想用虚拟字符串存根我的基类索引器并测试我的实际代码。我该怎么做?提前感谢您对此的任何帮助。

斯里。

在 MVC 中使用 Mock 进行单元测试

通常

不推荐练习,但在这种情况下"适当":模拟你的测试类。当然,在这种情况下,您只会模拟特定于基类的内容,而不会以任何方式覆盖您的后代。这可确保模拟基类的行为,从而在测试后代的方法时受测试控制。

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

我看不出有理由存根基类,因为您可以模拟测试中的类。我给你看看。

我在 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隔离器和MsTest。

希望对您有所帮助!