我在Moq中收到一条错误消息
Message: Test method [...] threw exception:
Moq.MockException: IVeracrossAPI.Authorization = Basic Og== invocation failed with mock behavior Strict.
All invocations on the mock must have a corresponding setup.
似乎很明显。不幸的是,在我的代码中我已经有了:
var VeracrossMock = new Mock<IVeracrossAPI>(MockBehavior.Strict);
var byteArray = Encoding.ASCII.GetBytes("username:password1234");
VeracrossMock.Setup(a => a.Authorization).Returns(new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)));
所以现在我不确定IVeracrossAPI.Authorization
的丢失方式。弄清确实发生了什么的方法是什么?
答案 0 :(得分:0)
使用MockBehavior.Strict
时,这意味着对于模拟,任何被调用的成员都必须具有相应的Setup
,否则将引发异常。
使用MockBehavior.Loose
(这也是默认设置)时,当您调用未设置的成员时,它将仅返回成员结果的默认类型。
显示的当前设置将用于从属性获取值。
从异常中可以看出,测试试图设置尚未设置的值。请记住,属性基本上是两种方法合而为一(get_Property和set_Property)。
建议对属性进行存根,以便跟踪分配的值。
// start "tracking" sets/gets to this property
VeracrossMock.SetupProperty(_ => _.Authorization);
var byteArray = Encoding.ASCII.GetBytes("username:password1234");
var authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
//set value
VeracrossMock.Object.Authorization = authorization;