2011-06-23 23 views
1

我想要编写单元测试我们的XAML绑定跑,我发现杰里米Likness'博客失败:Silverlight的单元测试完美运行交互方式,但是当通过自动化测试套件

http://csharperimage.jeremylikness.com/2010/08/unit-testing-xaml-data-bindings-in.html

,但我发现并非所有的测试都在运行。测试将全部通过绿色,但是当我通过调试器检查时,我可以看到在一次运行测试1,2和4(说)被解雇,并且下一次测试1,3和5(说)会被解雇。因此,我们不能依靠他们来验证代码是否正确。

进一步的调查使我谢尔盖Barskity的博客:

http://dotnetspeak.com/index.php/2010/07/unit-testing-silverlight-applications-ui-testing-and-test-automation/

与此唯一的问题是,我发现,除非我包裹“TestPanel.Children.Add(的TargetView)”呼叫的“ EnqueueCallBack“包装我无法保证在执行实际测试之前已经设置了绑定。

所以我已经结束了下面是我的测试代码:

[TestMethod] 
[Description("Tests that the active CheckBox is databound correctly")] 
[Tag("Location")] 
[Asynchronous] 
public void TestActiveCheckBox() 
{ 
    var activeCheckBox = GetUIElement<CheckBox>("chkActive"); 

    EnqueueCallback(() => TestPanel.Children.Add(TargetView)); 
    EnqueueCallback(() => { _viewModel.Active = true; }); 
    EnqueueCallback(() => Assert.AreEqual(activeCheckBox.IsChecked, 
              _viewModel.Active, 
              "Failed to data-bind active flag.")); 
    EnqueueCallback(() => { activeCheckBox.IsChecked = false; }); 
    EnqueueCallback(() => Assert.AreEqual(activeCheckBox.IsChecked, 
              _viewModel.Active, 
              "Failed to update active flag.")); 
    EnqueueTestComplete(); 
} 

这是测试的复选框,然后在视图模型变量之间的绑定。视图的DataContext设置为视图模型和视图代码:

<CheckBox Grid.Column="4" x:Name="chkActive" 
      IsChecked="{Binding Active, Mode=TwoWay}" 
      Content="Active" /> 

并没有正确实施的INotifyPropertyChanged界面上的视图模型的布尔属性。

当测试以交互方式运行时,此工作正常,但是当通过StatLight在构建机器上运行测试时,它们在第一个Assert.AreEqual时失败。看来绑定还没有真正建立起来。我能想到的唯一原因是该视图尚未加载。这将与之前依靠TargetView.Loaded事件触发的测试化身相结合,这似乎并没有发生。

因此,如何让a)让StatLight真正实例化视图或b)强制绑定而不加载视图?

更新

我还张贴了这个问题StatLight讨论页上:

http://statlight.codeplex.com/discussions/262473

一个解决方案已经公布这似乎首先要解决的问题:

你用“-b”选项运行它吗?如果你不这样做,你应该看到类似于“尝试使用Silverlight测试框架的TestPanel”,要使用它,你需要在StatLight中使用-b选项

我们也使用TeamCity在我们办理登机手续时自动生成,这需要使用--teamcity选项。但是,它们似乎是相互排斥的,因为同时添加-b--teamcity意味着没有任何测试运行,也没有报告任何错误。

回答

0

这个问题,现在通过使用最新的“出血”边缘StatLight的版本,这对于this bug

的时候它会在正式发布无指示修复解决。

相关问题