2011-06-23 22 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

的時候它會在正式發佈無指示修復解決。

相關問題