有没有办法检查传递给NSubstitute假的单个值,而不必指定其他值?
使用多个可选参数绘制一个方法:
void myMethod(int a=0, int b=0, int c=0);
我希望能够确认将特定值传递给其中一个参数,而不必指定其他参数:
fake.Received().myMethod(b: Arg.Is(1));
并且无论是 a 还是 b ,都会进行此验证调用。
这有效:
fake.Received().myMethod(a: Arg.Any<int>(), b: Arg.Is(1), c: Arg.Any<int>())
但不是很易读,因为不相关的参数会使测试变得混乱,如果将另一个参数添加到method
,它将会中断。
但是,这将忽略不将默认值传递给可选参数的方法调用:
NSubstitute.Exceptions.ReceivedCallsException : Expected to receive a call matching:
myMethod(0, 1, 0)
Actually received no matching calls.
Received 1 non-matching call (non-matching arguments indicated with '*' characters):
myMethod(*2*, 1, 0)
使用ReceivedWithAnyArgs
将导致忽略Arg.Is(),无论 b 的值如何,都会创建一个测试。
最后,我尝试安排假冒来捕捉价值:
fake.method(b: Arg.Do<int>(i => captureValue = i));
但除非签名完全匹配,否则不会被击中。我正在寻找一种方法来测试单个值,而无需在将可选参数添加到方法时重写大量测试。
注意:此示例使用int
值,但引用类型也会出现同样的问题。
给维护者一个注意事项:我希望Arg.Is覆盖ReceivedWithAnyArgs,如果那是可行的修改。这将允许创建最低限度的指定测试。