0

JavaPlaceでは、2 つの具体的なサブクラスAreaLevel;を持つ抽象クラスがあります。aLevelには親が必要Areaです。しかし、 の単体テストを作成しようとするとLevel、 の本格的なインスタンスを作成したくありませんArea。これに対処するには2つの方法があります。

1) interfaceIPlaceによって拡張された interface を作成しIArea、これPlaceArea実装します。次に、MockAreaを実装するクラスを作成し、テスト時に にIArea渡します。Level

2) モック オブジェクトを自動的に作成するモック フレームワークを使用します。

どちらの方法が良いですか?またはそれを行うための3番目の方法はありますか?

4

2 に答える 2

0

本格的な を作成したくない理由はわかりませんがArea、DB への接続やファイルの読み取りなど、テストが難しいことを想定してみましょう。それらは依存関係です。依存性注入が答えです。

たとえばArea、コンストラクターでこれを行うとします。

public Area() {    
    //get db connection
    //do something with db connection
}

を作成するLevelと、DB に接続されます。依存性注入を使用するようにコンストラクターを書き直す方法は次のとおりです。

public Area(Connection con) {    
    //do something with db connection
}

これで、 を作成するときに、Levelそれに偽物を与えConnectionLevel.

これで、モック フレームワークを使用して偽のConnection. モッキートをお勧めします。

于 2013-06-07T01:56:05.327 に答える
0

あなたが書いたように、モックフレームワークを使用することをお勧めします。

依存性注入は素晴らしいです。これを使用すると、クラスは対話する必要があるものの種類を明確に示すことができます。適切に行われれば、モック化されたオブジェクトの必要性は避けられないことがよくあります。モッキング フレームワークの操作に慣れます。個人的にはモッキートが好きです。

于 2013-06-07T01:56:18.533 に答える