C# 检查属性名称是否与xaml元素名称匹配的单元测试。卡利本微型

C# 检查属性名称是否与xaml元素名称匹配的单元测试。卡利本微型,c#,wpf,unit-testing,caliburn.micro,C#,Wpf,Unit Testing,Caliburn.micro,我使用它将ViewModel中的属性绑定到xaml中的元素。只有在视图中键入正确的属性名称时,绑定才会起作用。我正在编写一个单元测试来验证matchsense,这不会在编译时被捕获。以下是我所拥有的: [TestMethod] public void LockQuarterViewModel_property_names_should_match_xaml_element_names() { PropertyInfo[] properties = type

我使用它将ViewModel中的属性绑定到xaml中的元素。只有在视图中键入正确的属性名称时,绑定才会起作用。我正在编写一个单元测试来验证matchsense,这不会在编译时被捕获。以下是我所拥有的:

    [TestMethod]
    public void LockQuarterViewModel_property_names_should_match_xaml_element_names()
    {
        PropertyInfo[] properties = typeof(RollLockQuarterViewModel).GetProperties(); 
        RollLockQuarterView view = new RollLockQuarterView();

        foreach (PropertyInfo property in properties)
        {
            var element = view.FindName(property.Name);   // eg  "UserWideBlockOut" checkbox.
            Assert.IsNotNull(element);
        }
    }
这似乎适用于复选框:

<CheckBox Name="UserWideBlockOut"/>
但它不适用于使用绑定的用户控件:

<cc:YearQuarterSelector Margin="5,0,0,0" YearQuarter="{Binding CurrentYearQuarter}" IsEnabled="False" />
因此,有两个问题: 1如何使用binding关键字测试用户控件的绑定位置? 2在我的测试方法中有什么建议吗?更好的主意


谢谢

这是一种不好的单元测试方法,它会使它们变得脆弱。您正在针对可能严重膨胀代码库的愚蠢行为进行编码。这类事情只会在开发中出错,因此应该在生产之前捕获。

绑定表达式可能非常复杂。“你不应该用这种方法测试它们。”丹尼斯,有更好的方法吗?想法?我已经修复了一些特定字段无法保存的错误。这是因为已经完成了re-factors,它们忘记了在xaml中更改名称。我们目前没有资源在每3周的冲刺后对每个字段进行回归测试。当字段名称在返工后更改时,您是否有时间对失败的测试进行返工?我向你保证这会以眼泪结束。您正在测试实现细节,这些细节应该可以自由地随每个UI版本进行有机更改。您的测试将非常脆弱,并且将依赖于视图和viewModel的公共实现以及特定的实现风格,因为这最终是您的测试所需要的。这两个地方的任何更改都会破坏每个相关的测试。如果测试失败,那么我们就知道有一个bug。所以这是件好事。我很高兴看到重新工作后测试失败…这意味着重新工作做得不正确。