在 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;
}
}
我想用虚拟字符串存根我的基类索引器并测试我的实际代码。我该怎么做?提前感谢您对此的任何帮助。
斯里。
通常
不推荐练习,但在这种情况下"适当":模拟你的测试类。当然,在这种情况下,您只会模拟特定于基类的内容,而不会以任何方式覆盖您的后代。这可确保模拟基类的行为,从而在测试后代的方法时受测试控制。
在您的示例中,您将创建 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。
希望对您有所帮助!