0

このリンクを使用して tomcat で MysqlDataSource を構成しました。junitテスト ケースを作成しました。junit から以下の接続を呼び出すと、次のエラーがスローされます。

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

次のコードを使用しました

class DataConnection {
    private static DataSource dataSource;

public DataConnection() {
    try {
        Context ctx = new InitialContext();
        dataSource = (DataSource)ctx.lookup("java:comp/env/jdbc/test");
    } catch (NamingException e) {
       e.printStackTrace(); 
    }
}

public static Connection getConnection() throws SQLException {
    new DataConnection();
      Connection con=dataSource.getConnection();
      return con;
}
}

junitからTomcatを呼び出す方法は? これを達成する方法は?

4

2 に答える 2

0

TomcatJNDIを試してみてください。組み込みの Tomcat に基づいていますが、サーバーを起動せずに Tomcat の JNDI 環境のみを初期化します。したがって、Tomcat の構成ファイルで構成されているすべてのリソースに、テストで、または任意の Java SE アプリケーション内からアクセスできます。API は単純です。たとえば、context.xml で宣言された DataSource を取得するには:

TomcatJNDI tomcatJNDI = new TomcatJNDI();
tomcatJNDI.processContextXml(contextXmlFile);
tomcatJNDI.start();

その後、通常どおり DataSource を検索できます

DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/path/to/datasource")

TomcatJNDI の詳細については、こちらを参照してください。

于 2017-11-05T11:46:58.530 に答える
0

指定したコードは、コンテナから tomcat で実行する場合など、JNDI からデータベース接続を取得します。ただし、単体テストの場合 (JUnit を使用する場合)、「依存性注入」を使用することをお勧めします。たとえば、データベース接続をテスト対象のコードに明示的に渡すか、テストを実行する前に手動で設定します。

テストを実行するために JNDI に頼る必要はありません。テストしたいのは JNDI ではなく、実際のコードが正しく実行されていることを確認するだけです。

依存性注入に派手なライブラリ (Spring など) は必要ありません。アーキテクチャをわずかに調整するだけです。これにより、アプリケーションのテスト容易性が大幅に向上し、テストの実行時間が短縮されます。

(これは、質問で提供された少しの情報に基づいた、あなたの状況に対する私の仮定に基づいています)

于 2013-03-11T08:33:35.673 に答える