0

wpfトグルボタンをテストするには? テスト用に次のコードを使用しています。

[Test]
    public void TestToggleButtonClick()
    {
        DataGrid_WpfToolkit dataGrid = window.Get<DataGrid_WpfToolkit>("Data");
        Assert.IsNotNull(dataGrid);
        ToggleButton toggle = dataGrid.Rows[0].Get<ToggleButton>("RowHeaderToggleButton");
        toggle.Toggle();
        Assert.AreEqual(false, dataGrid.Rows[0].IsSelected);

        toggle.Toggle();
        Assert.AreEqual(true, dataGrid.Rows[0].IsSelected);

        toggle.Toggle();
        Assert.AreEqual(false, dataGrid.Rows[0].IsSelected);
    }

次のコードは、私の wpf アプリケーションのトグル ボタン クリック イベントの定義です。

private void ToggleButton_Click(object sender, RoutedEventArgs e)
    {
            DependencyObject obj = (DependencyObject)e.OriginalSource;
            while (!(obj is DataGridRow) && (obj != null))
            {
                obj = VisualTreeHelper.GetParent(obj);
            }
            if (obj is DataGridRow)
            {
                if ((obj as DataGridRow).DetailsVisibility == Visibility.Visible)
                {
                    (obj as DataGridRow).IsSelected = false;
                    (obj as DataGridRow).DetailsVisibility = System.Windows.Visibility.Collapsed;

                    FrameworkElement tb2 = GetTemplateChildByName((obj as DataGridRow), "RowHeaderToggleButton");
                    (tb2 as ToggleButton).IsChecked = false;
                    flag = false;
                }
                else if ((obj as DataGridRow).DetailsVisibility == Visibility.Collapsed)
                {
                    for (int i = 0; i < Data.Items.Count; i++)
                    {
                        DataGridRow itm = GetDataGridRowitem(i);
                        itm.IsSelected = false;
                        itm.DetailsVisibility = System.Windows.Visibility.Collapsed;
                        FrameworkElement tb = GetTemplateChildByName(itm, "RowHeaderToggleButton");
                        (tb as ToggleButton).IsChecked = false;
                    }
                    DataTemplate dt = FindResource("tocchild") as DataTemplate;
                    Data.RowDetailsTemplate = dt;
                    (obj as DataGridRow).IsSelected = true;
                    (obj as DataGridRow).DetailsVisibility = Visibility.Visible;

                    FrameworkElement tb1 = GetTemplateChildByName((obj as DataGridRow), "RowHeaderToggleButton");
                    (tb1 as ToggleButton).IsChecked = true;
                    flag = true;
                }
            }}

しかし、toggle.Toggle()は関数ToggleButton_Click()を呼び出しておらず、 datagrid.Rows[0].IsSelectedは常にfalseを返します。ToggleButton_Click()関数で、対応する行の選択を true から false または false から true に変更しています。しかし、コントロールは関数ToggleButton_Click()に来ていません。トグルボタンからToggleButton_Click()関数を呼び出す他の方法はありますか?

4

1 に答える 1

1

多くの方法があります:

  • ダーティ: リフレクションを使用するか、このメソッドのアクセシビリティを変更して、テスト コードから到達します

  • 変更イベント:Checked/Uncheckedクリックの代わりに使用

  • 電話toggle.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));

  • UIAutomationを使用します(私はこの方法を好みます) ( somekindofsample )

于 2015-04-29T15:04:11.537 に答える