我有类似A类的功能:
private async Task<T> Refresh(int a, string x)
{
// do something.. modify x
return x;
}
现在,这个函数基本上是同一个类A中另一个函数的参数。
classBobject.Get("somestring",(returnvalue) => Refresh(a,returnvalue));
我的模拟看起来像:
classBmockObject.Setup(classAmock => classAmock.Get<T>("somestring",(returnvalue) => Refresh(a, returnvalue))).ReturnsAsync(someotherobject);
但是,这需要我在测试类中再次创建一个名为Refresh的新函数。
现在我不知道如何编写模拟单元测试用例来测试b.get()
方法。
如何在不在测试类中重新编写函数体的情况下传递第3个参数?
答案 0 :(得分:1)
通过将以下第3个参数传递给Get方法来解决此问题。
It.IsAny <Func<T, Task<T>>
所以看起来像:
classBmockObject.Setup(classAmock => classAmock.Get<T>("somestring",It.IsAny <Func<T, Task<T>>())).ReturnsAsync(someotherobject);
谢谢大家。
答案 1 :(得分:0)
您可以为A类和AMock类声明一个公共基类。
这通常很有用,如果他们应该做同样的事情,但也允许你的测试错过了Refresh方法中的错误隐藏的错误,因为你的测试不再独立于它正在测试的代码。
此外,如果第三个列表不在A / AMock类中,您可能只想使用=> classAmock.Refresh(
而不是=> Refresh(
,如果可见性允许的话。