c# - 根据单元测试中传递的参数返回不同的模拟值与最小起订量

标签 c# asp.net .net unit-testing moq

我有一个名为 GetTasks() 的方法,它返回 10 个任务对象。我想为单元测试目的最小化此任务。这是代码:

 _crateRecallService.Setup(m => m.GetTasks(It.IsAny<int>(), It.IsAny<List<Stage>>(), It.IsAny<List<Severity>>())).Returns(new List<CrateRecallTaskWithComms>()
{
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "1", PkCTaskID = 1, CampaignId = 1, Severity = "High"}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "2", PkCTaskID = 2, CampaignId = 2, Severity = "High"}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "3", PkCTaskID = 3, CampaignId = 3, Severity = "High"}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "4", PkCTaskID = 4, CampaignId = 4}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "5", PkCTaskID = 5, CampaignId = 5}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "6", PkCTaskID = 6, CampaignId = 6}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "7", PkCTaskID = 7, CampaignId = 7}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "8", PkCTaskID = 8, CampaignId = 8}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "9", PkCTaskID = 9, CampaignId = 9}},
    new CrateRecallTaskWithComms() { CrateRecallTas = new CrateRecallTas() { CrateId = "10", PkCTaskID = 10, CampaignId = 10}}

});

这工作正常,但缺少一些东西。过滤任务严重性在这里不起作用。

我的问题是,如何设置 Moq,以便如果传入的严重性列表中有一个高严重性,它将返回 3 个任务而不是 10 个任务?所以换句话说,如果我通过它:

// Arrange
var severities = new List<Severity>() { Severity.High };

我想返回 3 个任务而不是 10 个。

最佳答案

Returns 不仅接受一个值,而且您还可以传递一个具有精确签名的委托(delegate)作为您的方法,实际参数将传递给该委托(delegate)。然后,您可以使用这些参数做任何您想做的事情。在你的情况下

 .Returns( (int i, List<Stage> stages, List<Severity> severities) =>
          {
              if ( severities.Contains(...) 
                 return ...
              else
                 ...
          } );

关于c# - 根据单元测试中传递的参数返回不同的模拟值与最小起订量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719831/

相关文章:

c# - ASP.net 通过内容页访问母版页变量

c# - onclick 方法在 Blazor 服务器端 Razor 组件中不起作用

c# - 在调用 ShowDialog 之后/期间使用异步值更新 ViewModel

c# - 如何解决命名不明确的扩展方法?

c# - .Net 4.5 中有什么新内容可以更好地处理 JSON 吗?

c# - 如何将 C# 对象本身设置为 null

c# - MVVM 灯 : Pass object from view to viewmodel

C# 只想在数据表中显示时间(不是日期)

c# - Crystal Report 似乎没有出现在 HTTPS 页面中

javascript - 关闭网页上的对话窗口