Я использую текущую версию 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);
Тест не пройден, потому что мой обработчик событий не срабатывает. Это почему?
Обновление:Поведение действительно работает во время выполнения.