首页 > 解决方案 > 如何使用 NUnit 和 Moq 在 C# 中对需要密封类型作为参数的方法进行单元测试?

问题描述

我目前正在实施System.Activties.Presentation.View.IExpressionEditorService以提供自定义表达式编辑器。

问题是,我不知道如何正确测试接口声明的CreateExpressionEditor方法,因为前两个参数是我无法模拟的密封类型。

存根也不是一种选择,因为这需要我用其他值正确设置它们,这最终意味着我也可以创建工作流设计器的一个实例并尝试从那里获取值。这闻起来像是我不应该做的事情。

任何提示,技巧,指针都非常受欢迎。

最好的问候,
丹尼尔


接口声明如下,我是从微软官方参考源码库中复制过来的。

//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------

namespace System.Activities.Presentation.View
{
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Controls;
    using System.Activities.Presentation.Model;
    using System.Activities.Presentation.Hosting;
    using System.Windows;

    public interface IExpressionEditorService
    {
        IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List<ModelItem> variables, string text, Type expressionType);
        IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List<ModelItem> variables, string text, Type expressionType, Size initialSize);
        IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List<ModelItem> variables, string text);
        IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces, List<ModelItem> variables, string text, Size initialSize);
        void CloseExpressionEditors(); // Closes all editors
        void UpdateContext(AssemblyContextControlItem assemblies, ImportedNamespaceContextItem importedNamespaces);
    }
}

标签: c#unit-testingworkflow-foundation

解决方案


推荐阅读