Cra*_*der 3 c# unit-testing mstest moq
我有一个类库,它具有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;
}
}
Run Code Online (Sandbox Code Playgroud)
HelperClass类别:
class HelperClass : Interface1
{
public int AddNumbers(int a, int b)
{
return a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
介面
public interface Interface1
{
int AddNumbers(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试测试该方法getData()。我AddNumbers使用来模拟方法Moq,如下所示。
[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;
}
Run Code Online (Sandbox Code Playgroud)
当我调试该测试时,它返回值0。
据我了解,当我们模拟任何方法时,它必须在测试时返回模拟值。在这种情况下,我将AddNumbers方法的返回值模拟为8。因此,它应该返回8,但是,它将返回0。
谁能解释我在做什么错。
编辑:实际上,Class1中a和的值b是动态的。在示例代码中,我已经对其进行了硬编码。而且,我不想测试AddNumbers方法。我希望它无论如何都返回一些固定值。在这种情况下,我希望它返回8。
您可以AddNumbers在模拟期望中使用明确的数字指定对的调用。仅当给这些显式值时,AddNumbers才返回8。如果您不关心实际参数,则AddNumbers需要以忽略参数的方式(例如通过It.IsAny<>)指定期望值
mockService.Setup(x => x.AddNumbers(It.IsAny<int>(),It.IsAny<int>())).Returns(c);
Run Code Online (Sandbox Code Playgroud)
另请参见https://github.com/Moq/moq4/wiki/快速入门部分“匹配参数”。
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |