"デザイン"のアドバイスが必要です。私は静的なJDBCオブジェクトと他のクラスで共有されている "メインエントリクラス"を持っています。異なるクラス間でオブジェクトを共有する
私MainClass
は、次のようになります。
public static Jdbc db1;
public static Jdbc db2;
connectDb(makeDirectConnection) // depending on runtime passed argument
public static connectDb(boolean makeDirectConnection) {
if(makeDirectConnection) // use direct connection
db1 = JdbcFactory.getInstance("db/config/main/db1.properties");
db2 = JdbcFactory.getInstance("db/config/main/db2.properties");
} else { // connect using via SSH tunnel (different host and port)
db1 = JdbcFactory.getInstance("db/config/tunnel/db1.properties");
db2 = JdbcFactory.getInstance("db/config/tunnel/db2.properties");
}
JdbcFactory
は、インスタンスのMap
を維持します。
それはちょっとOK動作しますが、私はdb1
またはdb2
は、ユニットテストから私はMainClass.dbConnect()
をしない場合、私は、nullポインタ例外を取得する使用されているクラスのためのユニットテストを作りたい場合は事を悪化させる - から
Main.db1 = JdbcFactory.getInstance("db/config/test/db1.properties");
をすべて一緒に、それは厄介だと私は好きではない:Test.class
から私がやるように、テストクラスは、私は、一つでも多くの異なるDBのセットアップを必要とします。 db1
とdb2
をどうやって共有するのがいいですか? Javaの実行引数から定義される。またboolean makeDirectConnection
はfinal
db1
とdb2
を使用してから私を停止します。どのようにこれを回避するためのアドバイス? (プログラムが実行される環境に依存しますが、ホスト名や他のOSのものに依存したくないのですが)。
あなたはそれらの接続が含まれています(セッターのようなすなわち無ミューテータメソッド)不変オブジェクトを使用することができます。
を次の使用しています。そのオブジェクトは、メインクラスまたはテストによって呼び出すことができるファクトリオブジェクトまたはメソッドによって作成されます。その後、必要に応じてそのオブジェクトを渡します。 – Thomas