在OnApplyTemplate方法的单元测试中获取Null控件

时间:2018-07-20 12:45:52

标签: wpf wpf-controls custom-controls visual-tree visualtreehelper

感谢您阅读本文。我正在研究自定义控件。假设我有abc.xaml,并且在abc文件夹中也有类abc.cs(请注意,这是自定义控件)。我无法实例化控件。在c#中从单元测试调用它时,它会为null,但在实际应用程序运行时不会为null。我想简要解释一下我的情况。假设我有网格,并且我有一个int [] x并计算了此数组保存的值,让它说3,然后我的网格应添加3个矩形。下面是一种返回任何控件的方法,以查找特定控件中存在的子代数。在这里,我发现网格中存在3个矩形,但是有些不能在单元测试中使用下面的方法来获取它。

        public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject
    {
        int childrenCount = VisualTreeHelper.GetChildrenCount(parent);

        for (int i = 0; i < childrenCount; i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);

            string controlName = child.GetValue(Control.NameProperty) as string;

            if (controlName == childName)
            {
                return child as T;
            }
            else
            {
                T result = FindChild<T>(child, childName);
                if (result != null)
                {
                    return result;
                }
            }
        }
        return null;

    }

仅当应用程序运行时,此代码才会在OnApplyTemplate()上实例化矩形的数量,但是如果在单元测试中调用此代码,则它将获取null。

在下面,获取gridObj为NULL。 abc.xaml文件中存在DP_Grid。

public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        gridObj = (Grid)GetTemplateChild("DP_Grid");

}

我不知道为什么会这样。我是否忘记在单元测试VerifyGrid_Test())中的OnApplyTemplate()之前或之后调用任何其他方法?下面是单元测试。

 [TestMethod]
    public void VerifyNumberOfBars_Test()
    {
        ds.OnApplyTemplate();
        ds.Signals = Signals;
        Grid getGrid = VisualTreeHelperExtensions.FindChild<System.Windows.Controls.Grid>(ds, "DensityBars_Grid");

        if (ExpectedChildrenCountFalse)
        {
            //assert fail;
        }
    }

0 个答案:

没有答案