0

上記の質問に対する私の推測では、それは不可能ですが、確認が必要です。したがって、問題は、プライベートな静的最終文字列に Oracle 固有の SELECT (ROWNUM および FOR UPDATE SKIP LOCKED キーワードが使用されている) があることです。

private static final String REC_QUERY_SELECT = "SELECT * FROM ... WHERE ROWNUM <=1 for update skip locked";

HSQL で単体テストしたいのですが、HSQL はこれらの Oracle キーワードを認識していません。REC_QUERY_SELECT 変数を変更 (SELECT をより単純なものに変更) したいのですが、最終的な文字列リテラルであるため変更できません。それを変更する方法はありますか?(コードベースを変更してはいけません。単体テストを作成する必要があるだけです)。私もこのコードを試しました:

field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
4

2 に答える 2

1

コンパイル時の定数(JLS を参照)として、文字列はコンパイル時に呼び出しサイトにコピーされるため、実行時に値を変更しても役に立たない場合があります。

一般に、異なるデータベースのターゲット設定は、テストでも本番環境でも同じように扱う必要があります。通常、リフレクションを含まない、同じ古い品質のソフトウェア エンジニアリング。

于 2012-10-22T13:32:23.347 に答える
0

ASMを使用すると、ターゲット クラスのバイトコードをインプレースで変更し、実行時に変更されたクラスを使用できます。

于 2012-10-22T13:32:35.640 に答える