- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 xUnit 中的 Moq 为涉及 CosmosDB 的服务编写单元测试。有一个方法GetVehicleInfo
返回 ItemResponse<VehicleInfo>
来自 CosmosDB。如ItemResponse
有一个 protected 构造函数,所以我无法更新它。因此,我正在 mock 调用者方法并执行
var responseMock = new Mock<ItemResponse<VehicleInfo>>();
responseMock.Setup(x => x.Resource).Returns(expectedItem); //expectedItem is of VehicleInfo type
cosmoRepoServiceStub.Setup(service => service.GetVehicleInfo("a1", "a2").Result).Returns(responseMock.Object);
我面临的问题是当 GetVehicleInfo
如下调用,它返回 null
总是。我希望它返回 ItemResponse<VehicleInfo>
其中Resource
将包含expectedItem
.
ItemResponse<VehicleInfo> response = await _cosmosRepo.GetVehicleInfo(plate, country);
if (response == null){ //... }
最佳答案
您应该像这样设置您的 cosmoRepoServiceStub:
cosmoRepoServiceStub
.Setup(service => service.GetVehicleInfo(It.IsAny<string>(), It.IsAny<string>()))
.ReturnsAsync(responseMock.Object);
GetVehicleInfo
参数应为设置方法中的任何字符串.Result
,而是选择 ReturnsAsync
或者,如果您确实需要将 "a1"
作为第一个参数,则将其定义为
const StringComparison comparison = StringComparison.OrdinalIgnoreCase;
cosmoRepoServiceStub
.Setup(service => service.GetVehicleInfo(
It.Is<string>(param1 => string.Equals(param1, "a1", comparison),
It.Is<string>(param1 => string.Equals(param1, "a2", comparison)))
.ReturnsAsync(responseMock.Object);
<小时/>
更新#1反射(reflect)到评论
Why does
It.IsAny
work whereas"a1"
does not?
Moq uses在底层使用 object.Equals
来检查 Setup
的参数与实际调用的参数。
这意味着值类型和字符串的比较基于它们的值(而不是基于它们的引用)。
因此,在您的特定情况下,这意味着 plate
或 country
不包含 a1
或 a2
字符串分别。
简而言之,我应该工作,但作为一般经验法则
设置
尽可能通用验证
尽可能具体关于c# - CosmosDB 中的模拟 ItemResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71064474/
我正在使用 xUnit 中的 Moq 为涉及 CosmosDB 的服务编写单元测试。有一个方法GetVehicleInfo返回 ItemResponse来自 CosmosDB。如ItemRespons
我需要在不知道分区键的情况下通过 Id 参数查询容器,我还需要检索该容器的 ItemResponse 才能到达 ETag 属性 通常使用分区键,这很容易使用分区键来完成,如下所示: var order
我需要在不知道分区键的情况下通过 Id 参数查询容器,我还需要检索该容器的 ItemResponse 才能到达 ETag 属性 通常使用分区键,这很容易使用分区键来完成,如下所示: var order
我正在尝试将代码的自动响应发送到我的表单。我可以打开它并发送空响应(我创建一个 FormResponse 并将其提交为空)。 现在我想在提交之前填写 itemResponses。我正在尝试使用 For
我是一名优秀的程序员,十分优秀!