0

私はこのようなクラスを持っています:

Class A 
{
   public boolean do(String s)
   {
        C c = DB.GetResult(s);
        ....
        return yes/no
   }
}

Mockitoでユニットテストを書きたいのですが、内部オブジェクトCをモックしてデータベース接続操作を抑制するにはどうすればよいですか。

4

1 に答える 1

0

Cではなく内部オブジェクトDBをモックするつもりですか?

あなたが持っているようなコードではできません。DB をクラス A に注入する必要があります。次に、単体テストで、データベースと対話するオブジェクトの代わりにモック/スタブを注入します。

編集:これを行うことができます(私はC#を使用しています):

Class A 
{
   private readonly IDb database;

   // you can inject by hand or using IoC container
   // if you don't like that you have to pass IDb implementation everywhere
   // where you create objects of type A you can add another constructor - look under
   public A(IDb database)
   {
       this.database = database;
   }

   // here you call the above constructor and pass you original DB object
   public A() : this(new DB())
   {
   }

   public boolean do(String s)
   {
        C c = database.GetResult(s);
        ....
        return yes/no
   }
}

もちろん、DB クラスは IDb インターフェイスを実装する必要があります。

interface IDb
{
    C GetResults(String s);
}

今、あなたのテストでこれを行います:

var a = new A(new TestDBDoingReturningExactlyWhatYouTellItToReturn());

およびアプリケーション コードでは:

var a = new A(new DB());

または上記の行を正確に実行するパラメーターなしのコンストラクター

var a = new A();
于 2013-03-01T20:19:10.240 に答える