1

私は現在、複雑なオブジェクト (主にリポジトリ オブジェクト) をパラメーターとして持つメソッドを持つプロジェクトに取り組んでいます。テストは、MSTest を使用して実行する必要があります。オブジェクトを TestInitialize メソッドで作成して、テスト メソッドの Actual Method にパラメータとして渡すための引数として使用できるようにするのは賢明なアプローチでしょうか? より良い代替案を提案してください。

その下に単体テストが必要なメソッド(Exectue()メソッド)のサンプルコードを添付しています。

public class AddOrdersToDbCommand
{
     private IOrdersRepository _ordersRepository;
     private OrderSetting _ordersSetting;

     public AddOrdersToDbCommand(IOrdersRepository ordersRepository, OrderSetting ordersSetting)
     {
        _ordersRepository = ordersRepository;
        _ordersSetting = ordersSetting;
     }

     public void Execute()
     {
         OrderSetting modifyOrderSettings = _ordersRepository.Get(_ordersSetting.Id);
         modifyOrderSettings.Name = _ordersSetting.Name;
         modifyOrderSettings.Status = _ordersSetting.Status;
         modifyOrderSettings.UpdatedBy = _ordersSetting.UpdatedBy;
         modifyOrderSettings.UpdatedDate = _ordersSetting.UpdatedDate;
         _ordersRepository.SaveOrUpdate(modifyOrderSettings);
         _ordersRepository.DbContext.CommitChanges();
     }

}
4

2 に答える 2

3

依存オブジェクトを提供するには、モックを使用する必要があります( Moqなどのモックフレームワークを使用)。このようにすると、現在テスト中のものだけを分離してテストすることになります。

本当にスタブオブジェクトを作成する必要がある場合は、ヘルパークラスを使用して作成することをお勧めします。TestDataGenerator.csクラスがあります。そこでは、オブジェクトを生成するための一連の静的メソッドを持つことができます。

使用例TestDataGenerator.GetStubOrderSetting();は、utilクラスを使用する利点になります。これは、TestInitializeメソッドを大きくて遅くすることなく、スタブオブジェクトを返すヘルパーメソッドのヒープ全体を作成できることです。また、個々のスタブメソッドを作成して、より複雑なオブジェクトを返すこともできます。

たとえばTestDataGenerator.GetStubEmployeeWithOrder();、最初にスタブ従業員を作成してから、作成済みのを呼び出してTestDataGenerator.GetStubOrderSetting();、新しく作成したスタブ従業員の注文を設定してから返します。

于 2013-03-20T23:21:55.423 に答える
0

テストでは、構成用のセットアップメソッドとともにモック(Moq)リポジトリをセットアップするクラスを使用します。

class MockRepo {
    private Mock<IRepository> descriptiveSettingRepository;
    private ArrayList _repository = new ArrayList();

    public MockRepo() {
        mockRepo.Setup( /* setup properties */ );
    }
}

MoQコールバックを使用して、オブジェクトをArrayListに追加します。ArrayListを照会して、オブジェクトを返すこともできます。

于 2013-03-20T23:42:25.610 に答える