経由で実行すると失敗しますすべてのテストが常に実行されているわけではないことが判明しました。テストはすべて緑色になりますが、デバッガを介して確認したところ、1回の実行テストで1,2と4が発砲し、次回のテスト1,3,5が発射されることがわかりました。そのため、コードが正しいことを検証するためにそれらに頼ることはできませんでした。Silverlightの単体テストは、私たちのXAMLバインディングのためのユニットテストを書くしようとしていると私はジェレミーLiknessのブログを発見した対話形式で完璧に実行されますが、自動化されたテストスイート
詳しい調査の結果、セルゲイBarskityのブログに私を導いた:
をこれで唯一の問題は、私はしない限り、私は「中「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のは、ViewModelにに設定され、ビューのコードは次のとおりです。
<CheckBox Grid.Column="4" x:Name="chkActive"
IsChecked="{Binding Active, Mode=TwoWay}"
Content="Active" />
、正しくINotifyPropertyChanged
インタフェースを実装するのViewModelにboolean型プロパティがあります。
これはテストが対話的に実行されても正常に動作しますが、StatLight経由でビルドマシンでテストを実行すると、最初にエラーが発生します。Assert.AreEqual
。バインディングは実際には設定されていないようです。私がこれについて考えることができる唯一の理由は、ビューがロードされていないということです。これは、TargetView.Loaded
イベントの発射に依存していた以前のテストインカネーションの経験と結びついていましたが、これは起こりそうにありませんでした。
私は、どのようにしてa)StatLightを実際にビューを正しくインスタンス化するか、またはb)ビューをロードせずにバインディングを強制する方法を教えてください。
私もStatLightディスカッションページに、この質問を投稿
更新:
:最初に見えた解決策が掲載されている
http://statlight.codeplex.com/discussions/262473
は、問題を解決するためにあなたは "-b"オプションでそれを実行していますか?以下のようにあなたが何かを見る必要がありますされない場合は我々はまた、チームシティーを使用している
を「あなたは、Silverlightのテストフレームワークのテストパネルを使用しようとしているように見えます。これを使用するには、StatLightで-bオプションを使用する必要があります」チェックイン時に自動ビルドを行うには、--teamcity
オプションを使用する必要があります。しかし、両方ともと--teamcity
の両方を追加すると、テストは実行されず、エラーも報告されないため、相互に排他的です。