使用Moq,如何检测按钮单击是否触发了viewmodel中的事件?

时间:2012-01-12 18:01:19

标签: c# silverlight-4.0 mvvm prism moq

我的视图中的命令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的click事件,并最终检测到ReturnSelectionListsCommand.Execute()GetAuditOrderByItemList()都被调用一次,以保证我的弹出窗口正常工作。从我的研究中,我看到ButtonAutomation对等体可用于触发点击,但在我的测试中,如果我使用MVVM,我看不到如何访问OKButton。

在我的单元测试中,我试图使用类似的东西:

var mock = new Mock<PopupViewModel>();

至少检测在viewmodel中调用方法的时间。

1 个答案:

答案 0 :(得分:1)

您可能想考虑使用project white,这是对MicrosoftUI Automation库的抽象。

您可以使用API​​模拟按钮上的单击,然后模拟视图模型以设置标志并声明它已设置。