データベースオブジェクトを単体テストしようとするなら、それをprocに入れて、データベースユニットテストフレームワークを利用する方がよいかもしれません。 Some info on oracle unit testing。私はデュアルに基づいてオラクルを仮定しています。
Javaコードをテストしようとしている場合は、テストしようとしているメソッドから直接クエリを引き出し、 "実際の"実装を提供できるインターフェイスにプログラミングすることを検討する必要があります。モックや偽の実装。この方法で、db呼び出し自体とは独立してテストします。
私はコード内で何を意味するかの例、および残念私は、Javaとあまりよく知っているとして、これは、C#
に比べて少しラフになるだろうが、あなたが持っていると言う:
だから、 public class ClassINeedToTest {
public void myMethodThatNeedsTesting(int param1) {
// do some stuff
// implementation of sql code ... not real since I don't know how to call SQL from java
SELECT CASE
WHEN :param = 1 THEN 'TEST1'
WHEN :param = 2 THEN 'TEST2'
WHEN :param = 3 THEN 'TEST3'
END
AS RESULT
FROM DUAL
// potentially do some other stuff?
}
}
上記のように、SQL自体をテストする場合は、リテラルSQLを取り出してストアドプロシージャに入れ、ユニットテストフレームワークを使用して、param value = 1、2、3です。
ただし、 // Do stuff
および/または// potentially do some other stuff?
をデータベースの接続性に依存せずにテストしたい場合は、比較的単純なリファクタリングを行う必要があります。
メソッドmyMethodThatNeedsTesting
は、実際のデータベース接続に頼らずにメソッドmyMethodThatNeedsTesting
をテストできるように、インターフェイスを使用して抽象化する必要があるデータベースに依存しています。私は、クエリが何を表すかの表現であることを上記に定義した
public interface ISomeInterface {
string getInfo(int param1);
}
:このような何かを見ることができる
。クエリはパラメータ(param1)を必要とし、スカラ文字列(クエリの結果)を返します。このインタフェースを考えると
、あなたはもっとこのように見えるようにあなたの元のクラスをリファクタリングすることができます:上記で
public interface ISomeInterface {
string getInfo(int param1);
}
public class MySomeInterfaceImpl implements ISomeInterface {
@override
public string getInfo(int param1) {
// implementation of sql code ... not real since I don't know how to call SQL from java
SELECT CASE
WHEN :param = 1 THEN 'TEST1'
WHEN :param = 2 THEN 'TEST2'
WHEN :param = 3 THEN 'TEST3'
END
AS RESULT
FROM DUAL
}
}
public class ClassINeedToTest {
private ISomeInterface _myInterface;
public ClassINeedToTest(ISomeInterface iSomeInterface) {
_myInterface = iSomeInterface;
}
public void myMethodThatNeedsTesting(int param1) {
// do some stuff
_myInterface.getInfo(param1);
// potentially do some other stuff?
}
}
、あなたは方法myMethodThatNeedsTesting
は、もはや今、データベース接続に直接依存していることを見ることはできませんが、むしろインタフェースです。これで、テスト目的で、a mock, stub, or fakeを提供できるようになりました。
例の偽物は次のようになります。
public class MySomeInterfaceFake implements ISomeInterface {
@override
public string getInfo(int param1) {
if (param1 == 1)
return "TEST1";
if (param1 == 2)
return "TEST2";
if (param1 == 3)
return "TEST3";
}
は、今以上の偽物で、あなたのコンストラクタで偽の実装に渡し、そしてあなたは、データベース接続に依存せずmyMethodThatNeedsTesting
テストすることができます。
上記のリファクタはdependency injectionと定義することができ、とりわけ簡単にテストされたコードにつながる疎結合には非常に便利です。私は上記の任意の構文を台無し場合
申し訳ありませんが、再びJavaは選択の私の言語ではありません:)
あなたは何を達成しようとしていますか?私は "データベース接続なしでSQLを実行する"とは何を理解しているのか分からない...あなたの目標は何ですか? – Kritner
クエリを実行する必要があるデータはありますか?あなたがこれで達成したいことが私にはっきりしないのですが、あなたは明確にすることができますか? – JonasCz
SQLデータベースを使用せずにSQLクエリを実行することはできません。クエリを処理することはできません。 – Jehy