首页 > 解决方案 > 检查方法是否收到了以列表为参数的调用

问题描述

我有一个调用存储库方法的服务方法;例如:

public async Task<bool> MyMethod(string param1, string param2)
{
    var result = myRepository.Where(x => x.param1 == param1).ToList();
    await myRepository.doStuff(result);

我正在尝试编写一个测试,目前看起来像这样:

var data = new List<MyData>() {new MyData {param1 = "1", param2 = "test"}};
var myRepository = Substitute.For<IMyRepository>();
myRepository.Where(x => x.param1 == "1").ReturnsForAnyArgs(data);

var myService = new MyService(myRepository);

bool w = myService.MyMethod("1", "2");

await myRepository.Received().doStuff(data);

但是,我收到了失败消息:

消息:NSubstitute.Exceptions.ReceivedCallsException:预计会收到匹配的呼叫:doStuff(List<MyData>) 实际上没有收到匹配的呼叫。收到 1 个不匹配的调用(用“*”字符表示的不匹配参数):doStuff(*List<MyData>*)

我还尝试了一种断言语法​​,例如:

await myRepository.Received().doStuff(Arg.Is<List<MyData>>(data));

但这没有什么区别。我是否在这里遗漏了什么,或者我检查列表的方式有什么问题。我的猜测是,这与比较两个列表的方式有关,因此它不会将它们视为相同,但除非我弄错了,否则它们是完全相同的。

标签: c#xunitnsubstitute

解决方案


推荐阅读