web-dev-qa-db-ja.com

Nullを返すJunit + getResourceAsStream

これがどのように可能かはわかりません。私はgetResourceAsStreamを読み直し、常にnullを返しています。

InputStream source = this.getClass().getResourceAsStream("test.xml");

Finderのtest.Javaのすぐ横(OS XとEclipseを使用)はtest.xmlです。

TextWranglerで開いて、内部にデータが存在するものとして表示できます。

これは、Junitテストで違いが生じる場合です。私はシステムにある既存のJunitテストを調べてみましたが、実際の例とまったく同じ方法で使用しています(ファイルの場所やコード自体など)。

GetClass()が正しいパスを返すことを防ぐのを妨げる小さな違いは何ですか?

ありがとう!

34
bobber205

getResourceAsStream()はCLASSPATHを使用しているため、ソースファイルではなくクラスの場所からロードされます。

XMLを.classファイルと同じディレクトリにコピーする必要があると思います。

22
Brian Agnew

クラスパスでリソースが見つかりません。 junitおよびmavenを使用している場合は、<include>セクションに<testResource>ファイルディレクティブを追加して、リソースがターゲット/テストクラスにコピーされていることを確認してください

また、次を使用して、ファイルシステム内のクラスの場所を見つけることもできます。

this.getClass().getResource(".")

リソースがそこにあるかどうかを確認する

27
surajz

Mavenを使用している場合は、この部分をpom.xml

<build>
    <testResources>
        <testResource>
            <directory>${project.basedir}/src/test/resources</directory>
        </testResource>
    </testResources>
</build>

きみの test.xmlおよびその他のリソースファイルは、src/test/resources

12
gumkins

この方法には常に問題があります。ここに役立つ2つのリンクがあります。

私は常に、先頭に「/」または「./」を追加して実験します。

私の経験から、最良の方法はFileInputStreamを使用することです。 (EclipseでFileInputStreamを使用している間)覚えておかなければならないことは1つだけです。デフォルト設定では、作業ディレクトリはプロジェクトルートに設定されます。 このコード を使用して、現在のディレクトリの場所(および必要な相対パス)をいつでも確認できます。

12

test.xmltestルートソースフォルダーのすぐ下にあります。次のようにします。

InputStream source = this.getClass().getClassLoader().getResourceAsStream("test.xml");
8
limc

私はこの問題に多くの時間を費やし、次の構成が不足していました。Eclipseプロジェクトを右クリックして、Properties-> Java Build Path-> Source = and edit Included row and add * .properties(* .fileExtension)

1
egroque

From Java API:

http://docs.Oracle.com/javase/6/docs/api/Java/lang/ClassLoader.html#getSystemResource(Java.lang.String)

クラスをロードするために使用される検索パスから指定された名前のリソースを見つけます。このメソッドは、システムクラスローダーを介してリソースを検索します

したがって、たとえば、構文は次のようになります。ClassLoader.getSystemResource( "test.xml")。toString();

魔法のように機能します!

1
Espen

MyClass.getResourceAsStream()を試してください。

また、クラスパスにtest.xmlを入れてみてください。たとえば、Eclipse Webプロジェクトでは、text.xmlをwebcontent/WEB-INF/classesに配置します

1
Paul Croarkin

Springクラスでこの問題が発生しました。 System.class.getResourceAsStream(...)は単体テストでは機能しましたが、Tomcatでは機能しませんでした。Thread.currentThread().getContextClassLoader().getResourceAsStream(...)はTomcatで機能しましたが、単体テストでは機能しませんでした。

最終的に私は一緒に行きました:

ClassUtils.getDefaultClassLoader()
    .getResourceAsStream("com/example/mail/templates/invoice-past-due.html"))

また、このようにしてやると、notスラッシュで始まるパスが必要になりました。

0
Kip

リソースファイルのコピーをテストリソースに配置する必要があります。私の例では、フォントファイルです。

enter image description here

次に、jUnitテストからnextを呼び出します。

 public static InputStream getFontAsStream() throws IOException {
        return Thread.currentThread().getContextClassLoader()
                    .getResourceAsStream("fonts/" + "FreeSans.ttf");
    }
0
Yuliia Ashomok