C# 如何为单元测试触发ItemsControl.GetContainerForItemOverride

C# 如何为单元测试触发ItemsControl.GetContainerForItemOverride,c#,wpf,unit-testing,controls,C#,Wpf,Unit Testing,Controls,我正在编写一些单元测试,我定义了以下控件 public class MyItemsControl : ItemsControl { public DependencyObject ContainerFromIndex(int index) { return (FrameworkElement)ItemContainerGenerator.ContainerFromIndex(index); } protected override Depend

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

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方法。我想测试另一种方法,但为了测试它,我需要每个项目都有一个容器,但我不知道如何进行测试

您无法测试此方法。当实现要显示的项时,它由内部使用。通常,您不需要测试框架代码。一般来说,您不能测试非公共代码。有没有办法让它认为窗口正在显示该项?有什么办法嘲笑它吗?这只是为了这个问题。我并没有真正尝试测试GetContainerForItemOverride()。我正在测试其他一些方法。但为此,我需要每个项都有一个容器。项的实现取决于
ItemsControl
的类型。如果是
列表框
列表视图
,则在实现项目时生成项目。由于虚拟化,这是当项目准备显示时,当项目滚动到视图中时。如果是使用虚拟化StackPanel的自定义
ItemsControl
,则可以启用此行为。如果未启用虚拟化,则在填充
ItemsSource
后立即生成所有项目。您可以创建自己的面板并手动生成项目容器。这是你能得到的最接近的。