如何对来自已接来电的参数进行断言?以下示例不起作用,因为传递给 {
"header":{
"callbackUrl":"",
"clientOrderId":"A565132",
"clientOriginationId":"2345FE",
"serviceProvider":"VERIZON",
"transactionId":"EEDT44567"
},
"customer": {
"nationalIdType":"",
"nationalId":"",
"addresses":[
{
"type":"WORK",
"postalCode":"330066"
}
],
"serviceProviderAuthentication":[
{
"passcode":"",
"securityQuestion":"",
"securityAnswer":""
}
]
},
"accountPhoneNumber":"",
"accountNumber":""
}
的操作永远不会被调用。
Arg.Do()
答案 0 :(得分:3)
标准方法是在收到正确的参数的情况下断言调用,而不是捕获参数并在其上声明。
View viewCanvas = findViewById(R.id.viewCanvas);
viewCanvas.setValue(42);
您可以将更多或更少的代码提取到不同的方法中,以使其更具可读性。
这种方法的问题在于它没有像FluentAssertions那样提供关于参数之间差异的尽可能多的信息。在这些情况下,我们可以回溯到provider.Received(1)
.SetValuesAsync(Arg.Is<IEnumerable<KeyValuePair<string,object>>>(
pairs => SameElements(pairs, new [] { Tuple.Create("Key1", "foo"), ... })));
或When..Do
以根据您的问题捕获参数。在这些情况下,我们不想使用Arg.Do
,我们只是调用它来调用,以便在调用时执行特定操作。还要确保在调用被测试方法之前设置Received
回调。
Do
或者我们可以使用//Arrange
IEnumerable<KeyValuePair<string, object>> receivedArgs = null;
provider.SetValuesAsync(
Arg.Do<IEnumerable<KeyValuePair<string,object>>>(x => receivedArgs = x)
);
// Act:
callWeAreTesting();
// Assert:
receivedArgs.Should()....
语法:
When..Do