Используя Moq, как я могу определить, произошло ли нажатие кнопки на событии в моей модели представления? - PullRequest
1 голос
/ 12 января 2012

Команды: Click.Command={Binding OkCommand} на мой взгляд (PopupView.xaml)

<Button
    Name="OKButton"
    Content="{Binding Path=foo.foo, Source={StaticResource LocalResourceWrapper}}"
    ToolTipService.ToolTip="{Binding Path=foo.foo, Source={StaticResource LocalResourceWrapper}}"
    HorizontalAlignment="Center"
    commands:Click.Command="{Binding OkCommand}"
    Margin="5,10,5,10"
    Click="OK_Click"
    TabIndex="1" />

запускает следующую команду в моей viewmodel: (PopupViewModel.cs)

    private ICommand _okCommand;

    public ICommand OkCommand
    {
        get
        {
            if (_okCommand == null)
            {
                _okCommand = new DelegateCommand<object>(OnOKCommand);
            }
            return _okCommand;
        }
    }

    public void OnOKCommand(object someObject)
    {
        this.ReturnSelectionListsCommand.Execute(this.GetAuditOrderByItemList());
    }

    public DelegateCommand<List<AuditOrderByItem>> ReturnSelectionListsCommand { get; set; }

По сути, я хочу обнаружить, что OKCommand действительно вызывается при нажатии кнопки. Итак, мне нужно вручную вызвать событие нажатия OKButton и в конечном итоге определить, что ReturnSelectionListsCommand.Execute() и GetAuditOrderByItemList() каждый вызывается один раз, чтобы гарантировать правильную работу моего всплывающего окна. Из моего исследования я вижу, что одноранговый узел ButtonAutomation может использоваться для срабатывания щелчка, но в моем тесте я не вижу, как я могу получить доступ к OKButton, если я использую MVVM.

В моем модульном тесте я пытался использовать что-то вроде этого:

var mock = new Mock<PopupViewModel>();

чтобы хотя бы определить, когда методы вызываются в модели представления.

1 Ответ

1 голос
/ 12 января 2012

Возможно, вы захотите использовать project white , который представляет собой абстракцию над библиотекой MicrosoftUI Automation.

Вы можете использовать API для имитации нажатия на кнопку, а затем смоделироватьВаша модель представления, чтобы установить флаг и утверждать, что он был установлен.

...