2

提供されたフレームワークでクライアント側のコンポーネントを作成していますが、コンポーネントを単体テストできる必要があります。コンポーネントはMVP(Model-View-Presenter)パターンを使用して記述されています。PEXを使用して、プレゼンターの単体テストを自動的に生成したいと思います。

以下はプレゼンターのコードです。

public partial class CompetitorPresenter : PresenterBase
{

    private readonly ICompetitorView _view; 

    public IGlobalDataAccess GlobalDataAccess;

    public IGlobalUI Globals;

    public SystemClient Client;

    public bool DeleteRecord()
   {
           if (_view.CompetitorName != "Daniel")
                return false;
           if (Client.SystemName != "Ruby")
                return false;
           return true;
    }
}

私が抱えている問題は、オブジェクトSystemClientがフレームワークによって提供されており、ファクトリクラスを使用してのインスタンスを作成できないことですSystemClient。したがって、PEXを実行して単体テストを自動的に生成する場合、無視するようにPEXに指示する必要があります。その結果、行がテストされないSystemClientため、メソッドDeleteRecordが完全にカバーされません。Client.SystemName != "Ruby"

私はモックオブジェクトMSystemClient(molesを使用して作成)を持っているので、構成のどこかでPEXに使用するように指示しMSystemClient、このメソッドを完全にカバーするテストケースをPEXに自動的に生成させることができるかどうか疑問に思います。

4

1 に答える 1

0

あなたは正しい軌道に乗っています。のインスタンスが作成される場所を制御できない場合はCompetitorPresenter.Client、すべてのインスタンスに対してモルを定義できます。

MSystemClient.AllInstances.SystemNameGet = () => "SomeName";

単体テストは「ホストされた環境」で実行する必要があります。

[HostType("Moles")]
public void TestMethod()
{
  MSystemClient.AllInstances.SystemNameGet = () => "SomeName";

  // Test code...
}
于 2012-01-06T09:48:25.153 に答える