2010-11-29 14 views
2

コードがSilverlightユニットテストフレームワークアセンブリから実行されているかどうかを判断する方法はありますか? (コンテキストのために、私たちはユニットテストプロジェクトを実行している場合FakeDomainClient にDomainClientを結合し、それ以外WebDomainClientにバインドするNinjectModuleを作成するために期待しています。)一部のコードがSilverlightユニットテストフレームワーク内で実行されているかどうかを確認する方法はありますか?

+0

+1 NB私たちはポストに「おかげで前もって」置いていません、私たちは助けてくれる答えをupvote –

答えて

2

それはビットの粗だが、一つの可能​​性System.Windows.Application.Current.Host.Sourceの1つのプロパティ(たぶんLocalPath)をテストすることです。ホスティングXAPファイルがテストプロジェクトのXAPかどうか、またはアプリケーションのXAPかどうかをテストする必要があります。これは明白にXAPファイル名を仮定しています。名前空間から何かを派生させたとしても、XAPファイル名は実際にはプロジェクトプロパティで設定可能です(常に一致する保証はありません)。 )。

また、System.Windows.Application.Current.RootVisualの値をテストすることもできます。ここでも、Silverlightユニットテストフレームワークの将来のバージョンで、同じMicrosoft.Silverlight.Testing.Client.TestPageを使用するという保証はないことを念頭に置いておく必要があります。たとえば、アプリケーションクラスは、少なくとも、必要に応じて将来の拡張メソッドに変更を限定することを意味します)。

もう1つの方法は、HTML Bridgeを使用して、System.Windows.Browser.HtmlPage.Document.DocumentUriのプロパティのいずれかをテストすることです。これは最初の2つのオプションよりも悪いようです。なぜなら、uris /ページ名のホストに関する仮定は、アプリケーションに使用される特定のUIElementまたはXAPファイルの名前に関する仮定よりも悪化する可能性が高いからです。

XAPファイル名またはホストページ名に基づいたソリューションは、複数のモジュール/プロジェクトにわたるテストでテクニックを使用したいので、多分どんな場合でもコンベンションベースの名前に依存する必要があります。

もっと良い方法は、おそらくSystem.Windows.Application.Current.Host.InitParamsを使用することです。テストプロジェクト内のページに特定のパラメータを渡す可能性があり、最終的にコードがその特定のパラメータの値をテストするようにすることができます。これには、XAPファイル名やURI /ページ名に特定のRootVisualや特定の命名規則を必要としないという利点があります。

+0

うわー!デレクありがとう!このようにする必要がある場合は、2番目の選択肢が最善であるように感じます。しかし、私は単体テストの戦略を、Remoが以下に示唆しているように変更しました。私は時間があれば、あなたの提案がどのように行われるかの例を投稿します。再度、感謝します! –

2

最良の方法は、実例コードで使用するインスタンスを決定するのではなく、テストでDomainClientを再バインドできる優れた設計を持つことによって、これをまったく知る必要がないことです。これにより、プロダクションコードにテストコードがなくなり、奇妙な例外が発生する可能性が少なくなります。

静的プロパティUnitTestRunningを持つ静的クラスを作成するには、デフォルトではfalseで、テスト初期化子でtrueに設定され、モジュールで読み取られることがあります。

+0

ちょっとレモ!テストでDomainClientを再バインドできる方が良いと私は確信しています。私は自分のコードでそれを行う方法を理解し、それに応じてそれを変更しました。アドバイスありがとうございます! –

関連する問題