2017-10-18 9 views
1

現在、私はCustomControlのUnitTestを開発しています。このコントロールには、呼び出されたメソッドがDesignTimeで呼び出されないときにのみ実行されるコードがあります。テストを実行すると、現在のコンテキストがDesignTimeのように見えるので、指定されたコードは実行されません。デバッグテスト中にDesignTimeからジャンプする

例:

public void SomeMethod() // EDIT: this is the OnLoaded Event for example. 
{ 
    if(IsNotInDesignMode()) // This is implemented somewhere else. 
    { 
     // I want this to be called in the Test Execution. 
     DoSomething(); 
    } 
} 

EDIT: はので、ここで十分に明確に私の最初の試みの波平、別の説明のように思えます。

テストメソッド/クラスにランタイムバージョンとしてテストを実行する方法はありますか?私は自分のCustomControlでプロパティやメソッドを変更したくないです。それは外部ライブラリに実装されているので、私はメソッドのIsNotInDesignMode()にアクセスしていません(例えば、それを模倣して)。

EDIT 2:コードを参照してください。

私を助けてくれてありがとう。

+0

「デザインタイムから飛び出る」ことはできません。ユーザーコントロールはデザイナーに表示されるか、実行時に表示されます。正確に何をしようとしているのかを明らかにし、「設計時間から飛び降りる」ことが何を意味するのかを詳しく説明します。これに答えるためにはより多くの文脈が必要です。ユニットのテスト中にIsNotInDesignModeプロパティの値を取得したい場合は、そのプロパティを設定するコンストラクタパラメータを作成するか、単体テストから直接割り当てます。 – CodeCaster

+0

私はあなたが私の問題を理解していないかもしれないことを理解します。しかし、なぜそれを重複としてマークしましたか?あなたは他のユーザーが私の質問を開き、答えを出そうとしないようにします。あなたが提供したリンクは完全に異なる質問です。 – Febertson

+0

あなたが与える問題の説明は複製によって回答されます:あなたは_detect_でしかなく、_change_デザインタイムではなく、読み取り専用のプロパティです。実際の問題を解決したい場合は、あなたの質問を読んで[編集]し、実際に答えられるようにしてください。私は再オープンすることができます。 – CodeCaster

答えて

2

ビューロジックとビジネスロジックが混在しているようです。 GUIを単体テストする理由はありません。

ビジネスロジックを独自のクラスにカプセル化することをお勧めします。その後、ビューから特定の操作を呼び出します。

これが完了したら、単体テストはビジネスロジックを直接テストし、設計時間を処理することはできません。

+0

この最初のアプローチをお寄せいただきありがとうございますが、このメソッドにはビジネスロジックはありません。 SomeMethodはLoadedEventなどです。コンストラクターや他の場所に私のものを置くことはできません。必要な値がまだ設定されていないからです。 – Febertson

+0

@Febertson正しいMVVMでは、ビューとビューモデルのために別々のプロジェクトを持つことができます。ユニットテストでは、ビューモデルとBLLだけが必要なので、ビュープロジェクトを参照すべきではありません。 – grek40

+0

私はあなたが言っていることを理解しています。しかし、私は動的な子要素を生成する新しいプロパティを持つコントロールを持っています。それは私がテストしたい機能です。私のテストでコントロールを作成します。新しいPropertyを設定し、子が正しく作成されているかどうかを確認します。この機能は、UI側のものです。 これはUnitTestでテストしないでください。それは私が現時点で評価しようとしているものです。 – Febertson

関連する問題