如何在C#中使用NUnit和Moq对一个方法进行单元测试,该方法需要一个密封类型作为参数?
我目前正在实现System.activities.Presentation.View.IExpressionEditorService以提供自定义表达式编辑器 问题是,我不知道如何正确测试接口声明的方法CreateExpressionEditor,因为前两个参数是我无法模拟的密封类型 存根也不是一个选项,因为这需要我用其他值正确地设置它们,这最终意味着我也可以创建工作流设计器的实例并尝试从中获取值。这闻起来像是我不该做的事 欢迎提供任何提示、窍门和指点 致以最诚挚的问候,如何在C#中使用NUnit和Moq对一个方法进行单元测试,该方法需要一个密封类型作为参数?,c#,unit-testing,workflow-foundation,C#,Unit Testing,Workflow Foundation,我目前正在实现System.activities.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)微软公司。版权所有。
//------------------------------------------------------------
命名空间System.Activities.Presentation.View
{
使用制度;
使用System.Collections.Generic;
使用系统文本;
使用System.Windows.Controls;
使用System.Activities.Presentation.Model;
使用System.Activities.Presentation.Hosting;
使用System.Windows;
公共接口IExpressionEditorService
{
IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem程序集、ImportedNamespaceContextItem importedNamespaces、列表变量、字符串文本、类型expressionType);
IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem程序集、ImportedNamespaceContextItem importedNamespaces、列表变量、字符串文本、类型expressionType、大小initialSize);
IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem程序集、ImportedNamespaceContextItem importedNamespaces、列表变量、字符串文本);
IExpressionEditorInstance CreateExpressionEditor(AssemblyContextControlItem程序集、ImportedNamespaceContextItem importedNamespaces、列表变量、字符串文本、大小initialSize);
void CloseExpressionEditors();//关闭所有编辑器
void UpdateContext(AssemblyContextControlItem程序集,ImportedNamespaceContextItem importedNamespaces);
}
}
一个可能的解决方法可能是这样的,但它不能很好地与Moq集成。非常感谢@dymanoid。