Вы, скорее всего, используете лямбду в вашем ICommand
, используя DelegateCommand
или RelayCommand
. Множество реализаций их существует повсеместно, и у Cinch может быть что-то похожее. Действительно простая версия (например, не предназначена для производственного использования):
public class DelegateCommand : ICommand {
private Action _execute = null;
public void Execute( object parameter ) {
_execute();
}
public DelegateCommand( Action execute ) {
_execute = execute;
}
#region stuff that doesn't affect functionality
public bool CanExecute( object parameter ) {
return true;
}
public event EventHandler CanExecuteChanged {
add { }
remove { }
}
#endregion
}
Тогда ваше тестовое тело может выглядеть примерно так:
bool wascalled = false;
var execute = new DelegateCommand(
() => {
wascalled = true;
} );
var window = new Window();
SomeClass.SetClose( window, execute );
// does the window need to be shown for Close() to work? Nope.
window.Close();
AssertIsTrue( wascalled );
Это слишком упрощенный пример. Конечно, вы захотите выполнить другие тесты, и в этом случае вам следует создать или найти более полную реализацию DelegateCommand
, которая также правильно реализует CanExecute
, среди прочего.