gpt4 book ai didi

c# - 调用单元测试委托(delegate)操作

转载 作者:行者123 更新时间:2023-11-30 15:39:58 28 4
gpt4 key购买 nike

我有一个字典,我正在使用它来避免编写大的 if 语句。它将一个枚举映射到一个 Action 。它看起来像这样:

 var decisionMapper = new Dictionary<int, Action>
{
{
(int) ReviewStepType.StandardLetter,
() =>
caseDecisionService.ProcessSendStandardLetter(aCase)
},
{
(int) ReviewStepType.LetterWithComment,
() =>
caseDecisionService.ProcessSendStandardLetter(aCase)
},
{
(int) ReviewStepType.BespokeLetter,
() =>
caseDecisionService.ProcessSendBespokeLetter(aCase)

},
{
(int) ReviewStepType.AssignToCaseManager,
() =>
caseDecisionService.ProcessContinueAsCase(aCase)
},
};

然后我在我的方法中这样调用它:

     decisionMapper[(int) reviewDecisionRequest.ReviewStepType]();

我的问题是如何对这些映射进行单元测试?(我正在使用 Nunit 和 c# 4.0)

当我调用 decisionMapper 时,我如何断言 - 1 等于调用 -caseDecisionService.ProcessSendStandardLetter(aCase)。

非常感谢。

最佳答案

您无法比较匿名委托(delegate)(参见 this 链接)。您必须使用一点反射来检查 Action 委托(delegate)的 Method 属性。它必须与应调用的 caseDecisionService 方法的 MethodInfo 相匹配。例如(您可以重写以使用函数来缩短代码):

MethodInfo methodToCall =
decisionMapper[(int)ReviewStepType.StandardLetter].Method;

MethodInfo expectedMethod =
typeof(CaseDecisionService).GetType().GetMethod("ProcessSendStandardLetter");

Assert.AreSame(expectedMethod, methodToCall);

关于c# - 调用单元测试委托(delegate)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9785512/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com