如何找出起订量中缺少的内容?

时间:2018-06-25 15:46:15

标签: c# unit-testing moq

我在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的丢失方式。弄清确实发生了什么的方法是什么?

1 个答案:

答案 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;

引用Moq Quickstart: Properties