Почему RelayCommand RaiseCanExecuteChanged не работает в модульном тесте?

Я использую текущую версию MvvmLight, доступную в Nuget (4.1.23.0 ), и вызов RaiseCanExecuteChanged, похоже, ничего не делает в модульном тесте. Сценарий очень простой, у меня есть команда:

public RelayCommand FooCommand { get; private set; }

Я обновляю его в конструкторе модели представления и указываю на некоторые приватные методы:

FooCommand = new RelayCommand(Foo, CanFoo);

private void Foo()
{
    // do some fooing.
}

private bool CanFoo()
{
    return SomeRequiredProperty != null;
}

Затем в сеттере для SomeRequiredPropertyя вызываю RaiseCanExecuteChanged:

public object SomeRequiredProperty
{
    get
    {
        return someRequiredProperty;
    }

    set
    {
        someRequiredProperty = value;
        FooCommand.RaiseCanExecuteChanged();
    }
}

Теперь в модульном тесте я делаю следующее:

// Arrange
var canExecuteChanged = false;
viewModel.FooCommand.CanExecuteChanged += (sender, args) => canExecuteChanged = true;

// Act
viewModel.SomeRequiredProperty = new object();

// Assert
Assert.That(canExecuteChanged, Is.True);

Тест не пройден, потому что мой обработчик событий не срабатывает. Это почему?

Обновление:Поведение действительно работает во время выполнения.

10
задан andrej351 24 August 2012 в 01:19
поделиться