2017-07-19 15 views
0

リソースファイルを読み込むクラスメソッドがありますが、ユニットテストでこのクラスを実行しようとしているときにファイルを見つけることができません。ClassLoader UnitTestからリソースが見つかりません

私がアプリケーション戦争を展開するか、または単にmavenを使用してEclipseから実行すると、すべて正常に動作します。

ファイルの場所(わからないのsrc /テスト/リソースが必要な場合、私は問題が発生した後にのみ、しかし助けていない、これを追加しました):

src/main/resources/ 
    -> com 
     -> xxxx 
      -> xxxx_portal 
       -> web 
        -> server 
         -> servlet 
          -> reports -> Logo.png 
src/test/resources/ 
    -> com 
     -> xxxx 
      -> xxxx_portal 
       -> web 
        -> server 
         -> servlet 
          -> reports -> Logo.png 

関連するクラスコード:

package com.xxxx.xxxx_portal.web.server.servlet.reports; 

public class ModuleReports { 
    private static final String LOGO_IMAGE_PATH = "/com/xxxx/xxxx_portal/web/server/servlet/reports/Logo.png"; 

    ... 
    private static InputStream getLogoImage() { 
     ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
     InputStream is = classLoader.getResourceAsStream(LOGO_IMAGE_PATH); //Problem here, InputStream is null. It should not be null. 
     return is; 
    } 
    ... 
} 

答えて

0

ClassLoader.getResourceAsStreamの引数は、スラッシュ(/)で開始してはなりません。あなただけACDLABS_LOGO_IMAGE_PATHの値から初期のスラッシュを削除することもできますが、あなたはむしろClassLoader.getResourceAsStreamよりもClass.getResourceAsStreamを使用する必要があります。ClassLoader.getResourceAsStreamとは異なり

private static InputStream getLogoImage() { 
    return ModuleReports.class.getResourceAsStream("ACDLogo.png"); 
} 

を、Class.getResourceAsStream への引数はで始めることができますスラッシュは必要ですが、必要はありません。そうでない場合、文字列は、呼び出されたクラスと同じパッケージ内のリソースを指すものとみなされます。この動作はすべて、the documentationに記述されています。

+0

可能であれば、このクラスとそのメソッドに触れないことを望んでいました。スラッシュを取り除くと単位テストができると言っていますか?私が述べたように、クラスModuleReportsは単体テストから実行していないときにスラッシュでうまく動作します。 – CrazySabbath

+0

試してみる価値があります。また、あなたの質問を更新し、アプリケーションの構築方法を示すこともできます。つまり、Maven pom.xmlまたはAnt build.xmlを表示します。 – VGR

+0

スラッシュを削除します。これは異常な動作ですが、デプロイされたアプリケーションは起動スラッシュがあってもなくてもうまく動作します。 – CrazySabbath

関連する問題