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
后立即生成所有项目。您可以创建自己的面板并手动生成项目容器。这是你能得到的最接近的。