Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何对CanExecuteRouteEventHandler进行单元测试?_C#_Unit Testing_Moq_Routedevent - Fatal编程技术网

C# 如何对CanExecuteRouteEventHandler进行单元测试?

C# 如何对CanExecuteRouteEventHandler进行单元测试?,c#,unit-testing,moq,routedevent,C#,Unit Testing,Moq,Routedevent,我正在尝试为以下代码编写单元测试: public static void AppExitCmdCanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = true; } 这段代码的问题是我无法创建CanExecuteRoutedEventArgs类型的模拟实例(密封类)或实例(内部构造函数) 我尝试了以下操作,但以下两个代码

我正在尝试为以下代码编写单元测试:

public static void AppExitCmdCanExecute(object sender,
                                        CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true;
}
这段代码的问题是我无法创建CanExecuteRoutedEventArgs类型的模拟实例(密封类)或实例(内部构造函数)

我尝试了以下操作,但以下两个代码都引发运行时异常

[Test()]
public void AppExitCmdCanExecuteTest()
{
    object sender = null;
    //Type to mock must be an interface or an abstract or non-sealed class.
    var mockArgs = new Moq.Mock<CanExecuteRoutedEventArgs>();
    AppCommands.AppExitCmdCanExecute(sender, mockArgs.Object);
    Assert.IsTrue(mockArgs.CanExecute);
}

[Test()]
public void AppExitCmdCanExecuteTest()
{
    object sender = null;                
    //Constructor on type 'System.Windows.Input.CanExecuteRoutedEventArgs'
    // not found.
    var mockArgs = Activator.CreateInstance(typeof (CanExecuteRoutedEventArgs),
                                            BindingFlags.NonPublic | 
                                            BindingFlags.Instance,
                                            new object[2] {fakeCommand, 
                                                           fakeParameter});
    AppCommands.AppExitCmdCanExecute(sender, mockArgs);
    Assert.IsTrue(mockArgs.CanExecute);
}
[Test()]
公共无效AppExitCmdCanExecuteTest()
{
对象发送方=null;
//mock的类型必须是接口、抽象类或非密封类。
var mockArgs=new Moq.Mock();
AppCommands.AppExitCmdCanExecute(发送方,mockArgs.Object);
Assert.IsTrue(mockArgs.CanExecute);
}
[测试()]
公共无效AppExitCmdCanExecuteTest()
{
对象发送方=null;
//类型为“System.Windows.Input.CanExecuteRouteEventArgs”的构造函数
//没有找到。
var mockArgs=Activator.CreateInstance(typeof(CanExecuteRouteEventArgs),
BindingFlags.NonPublic|
BindingFlags.Instance,
新对象[2]{fakeCommand,
伪参数});
AppCommands.AppExitCmdCanExecute(发送方,mockArgs);
Assert.IsTrue(mockArgs.CanExecute);
}
感谢您的关注。

您使用过。使用以下命令:

Activator.CreateInstance(typeof (CanExecuteRoutedEventArgs),
                         BindingFlags.NonPublic | BindingFlags.Instance, null,
                         new object[2] {fakeCommand, fakeParameter}, null);

您需要确保
fakeCommand
不是
null
,因为构造函数有一个用于该参数的保护子句。

当然,这确实是问题所在。这管用!我刚试过。肯定有用;-)顺便说一句:异常消息告诉您,问题是您的命令参数为空:
ArgumentNullException:Value不能为空。参数名称:command