首页 > 解决方案 > 如何找出最小起订量中缺少的内容?

问题描述

我在 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丢失。有什么方法可以弄清楚到底发生了什么

标签: c#unit-testingmoq

解决方案


使用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;

参考起订量快速入门:属性


推荐阅读