Как выполнить юнит-тест CanExecuteRoutedEventHandler? - PullRequest
2 голосов
/ 14 сентября 2011

Я пытаюсь написать модульный тест для следующего кода:

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);
}

Спасибо за ваш интерес.

1 Ответ

3 голосов
/ 14 сентября 2011

Вы использовали неправильная перегрузка CreateInstance. Используйте это:

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

Вы должны убедиться, что fakeCommand не null, так как в конструкторе есть предложение guard для этого параметра.

...