[Seasar-user:960] 複数のdataSourceとS2TestCase

Hikaru Taniguchi taniguchi
2004年 8月 27日 (金) 16:23:27 JST


tanigonです。

(以下 @S2.0.16)

いま 複数のDataSourceを使うような j2ee.dicon状態になっていて(実際に接続
先のデータベースも複数に渡る)、これをテストする時に 

...TooManyRegistrationRuntimeException: 
[ESSR0045]interface javax.sql.DataSourceに複数のコンポーネントが登録されています

とのことで、どうも S2TestCaseの

private void setupDataSource() {
	try {
		if (container_.hasComponentDef(DataSource.class)) {
			dataSource_ = (DataSource) container_
					.getComponent(DataSource.class);
		} else if (container_.hasComponentDef(DATASOURCE_NAME)) {
			dataSource_ = (DataSource) container_
					.getComponent(DATASOURCE_NAME);
		}
	} catch (Throwable t) {
		System.err.println(t);
	}
}

ここみたいなのですが、複数のDataSourceを入れている場合に確実に 1つ目の
if()で例外になってしまい dataSource_ がセットされないのですが、 2つ目の
if()と順序を入れ替えるのをS2TestCaseの標準とする、ってのはダメでしょうか。

# この場合は、S2TestCaseで writedb するときに使うデータソースをnameで明
# 示的に指定することがテストケース作成者の務めになるのでokな感じがします。

あと、今回のテストケースの場合、複数のデータベースに跨ってテスト用のデー
タを準備する必要がありますが、S2TestCaseの仕様上一つのDataSourceしか補助
?対象としてくれないので、protectedな setterかなにかがあると助かるのです
がいかがでしょうか (現状 datasource_ は private scope)

ヘンな使い方、ヘンな考え方 してるかもしれませんが…
ご指摘いただけますと勉強になります。

# 複数のdataSourceを使うようなクラスの試験の場合 testHogeTx()なんかでト
# ランザクション勝手によろしく!が使えないんですよね、多分。やっぱムリが
# あるのかなあ... > dataSource

ではでは。

-- 
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]> 




Seasar-user メーリングリストの案内