【发布时间】:2020-12-15 18:03:43
【问题描述】:
我有一个类库,它有 2 个类和一个接口,如下所示。
主类:
public class Class1
{
int a=5 ,b=9;
private Interface1 iHelper;
public Class1(Interface1 _inter)
{
iHelper = _inter;
}
public int getData()
{
int result = iHelper.AddNumbers(a, b);
return result;
}
}
HelperClass 类:
class HelperClass : Interface1
{
public int AddNumbers(int a, int b)
{
return a + b;
}
}
界面:
public interface Interface1
{
int AddNumbers(int a, int b);
}
现在,我正在尝试测试方法getData()。我已经使用 Moq 模拟了 AddNumbers 方法,如下所示。
[TestMethod()]
public void getDataTest()
{
int a = 3, b = 5;
int c = 8;
var mockService = new Mock<Interface1>();
mockService.Setup(x => x.AddNumbers(a,b)).Returns(c);
Class1 obj = new Class1(mockService.Object);
var result = obj.getData();
int final = result;
}
当我调试这个测试时,它返回值 0。
据我了解,当我们模拟任何方法时,它必须在测试时返回模拟值。在这种情况下,我将AddNumbers 方法的返回值模拟为 8。所以它应该返回 8。但是,它返回的是 0。
谁能解释我做错了什么。
编辑:实际上,Class1 中a 和b 的值是动态的。在示例代码中,我对其进行了硬编码。而且,我不想测试AddNumbers 方法。无论如何,我希望它返回一些固定值。在这种情况下,我希望它返回 8。
【问题讨论】:
-
a 和 b 的值实际上是动态的。所以请不要使用硬编码的值。
-
对于造成的混乱,我深表歉意,我已相应地编辑了问题。
标签: c# .net unit-testing moq mstest