2

次のメソッドはどのように単体テストする必要がありますか?

    /// <summary>
    /// Entry point for GUI thread.
    /// </summary>
    public void VerifyDataTypesAsync()
    {
        Task verificationTask = Task.Factory.StartNew(() =>
        {
            VerifyDataManagerAsync();
        });
    }

統合テストを介してテストすることのみが可能ですか、それともタスクが作成されたことをテストすることは可能ですか?

ご協力いただきありがとうございます

4

2 に答える 2

3

このタスクを作成するための Factory を作成し、Seams を通じて使用できます。プロパティ シームを使用できます。これは、ファクトリのインスタンスをテスト中のクラスのプロパティに設定する場合、またはコンストラクタを介してファクトリを指定することでコンストラクタ シームを使用できる場合です。次に、このファクトリをモックして、2 つのシームのいずれかを介して設定し、VerifyDataTypesAsync メソッドがタスクを作成するメソッドを呼び出しているかどうかを確認できます。

class YourClass
{
    public YourClass(ITaskFactory factory)
    {}

    public void VerifyDataTypesAsync()
    {
       Task verificationTask = factory.Create(); // you can pass an instance of a delegate as parameter if you need.  
    }
}

class TasksFactory : IFactory
{
   public Task Create()
   {

   }
}

次に、テストで IFactory のモック オブジェクトを作成し、それをクラスのコンストラクターに渡し、モックのモック ルールを設定して、メソッド Create が呼び出されたかどうかを確認します。

NUnit と RhinoMocks について話している場合、これについて調べることができます。

var mockRepository = new MockRepository();
var mockObject = mockRepository.CreateMock<IFactory>();
var yourClass = new YourClass(mockObject);    


Expect.Call(mockObject.Create);

mockRepository.ReplayAll();

mockObject.VerifyDataTypesAsync()

mockRepository.VerifyAll(); // throw Exception if your VerifyDataTypesAsync method doesn't call Create method of IFactory mock

大雑把に言えば…でもそれも一通り…

于 2012-07-26T11:39:40.940 に答える
2

独自の Task ファクトリ クラスでタスクの作成をラップし、単体テストでモックして正しく使用されていることを確認できます。たとえば、次のようなクラスを作成します。

class MyTaskFactory
{
  public virtual void CreateTask(Action a)
  {
    Task.Factory.StartNew(a);
  }
}

これらのファクトリ オブジェクトの 1 つを使用して、タスクを作成する必要があるオブジェクトを提供します。単体テストでは、実際のファクトリの代わりにモック バージョンを提供し、CreateTaskメソッドが呼び出されたかどうかを確認します。

モッキングの詳細については、RhinoMocksまたはMoqを参照してください。

于 2012-07-26T11:08:53.670 に答える