3

私はPexとMolesが初めてです。コードで Pex を実行しようとしていますが、コンストラクター インジェクションを使用しています。コンストラクターを注入する方法を Pex に指示する方法はありますか?

編集

    public UserLogic(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public int GetUsersAge(int id)
    {
        User user = _userRepository.GetById(id);
        DateTime DOB = user.DOB;
        DateTime now = DateTime.Today;
        int age = now.Year - DOB.Year;
        if (DOB > now.AddYears(-age)) age--;
        return age;
    }

スタブ userRepository を挿入する必要があります。_userRepository.GetById(id) が呼び出されると、Pex が NullReferenceException で失敗します。単体テストにMoqを使用していますが、pexとmolesに切り替えたいです

スタブの作成に PexFactories を使用する必要がありますか?

4

1 に答える 1

1

Moles Stub 型を Pex で生成されたパラメーター化されたテストに渡してみてください。パラメーター化されたテストを作成するには、調べたいクラスを右クリックし、[ PEX] > [パラメーター化された単体テストの作成] を選択します。これにより、引数を含むテスト クラスにメソッドが生成されます。個々のテストは、このパラメーター化されたテストを呼び出し、個々のテスト引数を送信します。

テスト対象のコードが引数として依存関係の挿入を使用する場合 (インターフェイス型の引数がある場合)、Pex によって生成されたパラメーター化されたテスト メソッドにも同じインターフェイス型の引数が含まれます。パラメータ化されたメソッドを呼び出す独自のテスト メソッドを記述して、インターフェイス タイプを含む独自の値を渡すことができます。Pex で生成されたファイルに書き込まないでください。

また、単体テストのインジェクションに Mole Stub タイプを使用することを検討することをお勧めします。Microsoft Moles リファレンス マニュアルは、単体テストで Moles を使用する方法を学習するのに最適な場所です。パラメーター化されたテストを作成すると、インターフェイス用にモール スタブ タイプが作成されます。スタブ タイプの回り道を構成し、それをパラメーター化されたテストに渡すだけです。

スタブタイプの迂回路の作成は非常に簡単です。テスト プロジェクトで、頻繁に使用される迂回路を構成する構成メソッドを作成することをお勧めします。私は通常、列挙型フラグを引数としてこのメ​​ソッドに追加するので、特定の型に対してどの迂回路を作成するかをすべて 1 回の呼び出しで簡単に伝えることができます。

サンプル列挙:

[Flags()]
public enum MoleConfigurations
{
    MoleSqlClientObjects,
    DisableDirectory_Exists,
    DisableEventLogExtensions,
    DisableInitializeDatabaseObjects,
    DisableInitializeThreadingObjects,
    DisableQueueExistingDataFiles,
    DisableConstructor
}
于 2011-12-07T18:48:46.823 に答える