2017-08-08 68 views
0

単体テストでいくつかの環境変数を使用する必要があります。 eclispeデバッグ/ MyTestクラスの設定を実行するようになりましEclipse jUnit:単体テストで環境変数を使用できません

public class MyTest 
{ 

private String myVar=null; 

@Before 
    public void setUp() 
    { 
     myVar = System.getEnv("myEnv"); 
    } 

@After 
    public void tearDown() {} 

@Test 
    public void myTestMethod() 
    { 
     assertNotNull(myVar); 
    } 
} 

次のテストクラスを考えてみましょう、私は

myEnv=myVal

と私はjUnitとしてMyTestクラスを実行するように、環境変数を定義しますテスト、myTestMethod合格。

私はjUnitテストとしてmyTestMethodを実行しようとすると、しかし、それは私にNullPointerExceptionを与えます。

新しい実行/デバッグ構成を具体的にはmyTestMethodに作成し、新しい構成で環境変数を再作成する唯一の方法です。

私は数十の環境変数とテストを持つことができるので、これは非常にイライラです。

eclipseでこの問題を解決する方法はありますか?私はintelliJで働いていませんが、それは同じ問題を抱えていますか?それともjUnitの問題ですか?

+1

あなたのOSは?環境変数はどこで設定しますか? – CrazyCoder

+0

私はmac osxです。私はクラスのEclipse実行構成で環境変数を設定します。 – AbtPst

答えて

0

単一のテスト方法を実行している場合、既存の起動設定は再利用されません。Eclipse bug 213316(JUnitビューを除く)を参照してください。おそらく、あなたが望む動作を実装するプラグインがあります。また、Eclipse source codeに基づいて、自分で実行する動作を実装することもできます。

解決策はありませんが、短縮:Ctrlを押して、実行ボタンまたは実行コンフィギュレーションメニュー項目をクリックして、前回の起動コンフィギュレーションまたは対応する起動コンフィギュレーションを開きます。

ます。また at runtime unchangeable environment variablesの問題解決するようにコードを変更することを考慮に入れることが

:代わりにSystem.getenv(...)の量産コードを使用Env.getenv(...)

  • を:
    public class Env { 
        private static Function connector = System::getenv; 
        public static void setConnector(Function newConnector) { 
         connector = newConnector; 
        } 
        public static String getenv(String name) { 
         return connector.apply(name); 
        } 
    }
  • テストコードでリダイレクトEnv.getenv(...)での環境変数を設定します。
    @Before 
    public void setUp() { 
        Map env = new HashMap<>(); 
        env.put("myEnv", "42"); 
        Env.setConnector(env::get); 
        //... 
    }
関連する問題