如何触发ItemsControl.GetContainerForItemOverride进行单元测试

时间:2019-07-12 15:33:19

标签: c# wpf unit-testing controls

我正在编写一些单元测试,并且定义了以下控件。

public class MyItemsControl : ItemsControl
{
    public DependencyObject ContainerFromIndex(int index)
    {
        return (FrameworkElement)ItemContainerGenerator.ContainerFromIndex(index);

    }

    protected override DependencyObject GetContainerForItemOverride()
     {
         return new MyControl();
     }
 }

 public class MyControl : Control { }   

在单元测试中,我正在创建一个带有itemsControl的窗口,并且希望调用GetContainerForItemOverride()方法,因此,每当我将一个项目添加到ItemsControl时,都会为其创建一个容器。但是我不知道如何触发它。

[TestMethod]
public void Test()
{
    Window window = new Window();

    var model = new ViewModel();

    MyItemsControl itemsControl = new MyItemsControl();

    window.Content = itemsControl;
    itemsControl.Items.Add(model);

    var container = itemsControl.ContainerFromDataContext(slideModel);  
}

我认为itemsControl.Items.Add(model);可能最终会调用该方法,但是itemsControl.ContainerFromDataContext(slideModel)仍返回null而不是类型为MyContainer的容器。我感到很困惑。我怎样才能解决这个问题??谢谢!

顺便说一句,如果不清楚,我不尝试测试ContainerFromDataContext方法。我想测试另一种方法,但是要测试它,我需要每个项目都有一个容器,但是我无法弄清楚如何进行测试

0 个答案:

没有答案