PowerMockito
を使用すると、静的メソッドをモックできます。このコードは、私は、これはあなたが達成しようとしているものを示していると信じてSystem
クラスをモックとgetenv()
@RunWith(PowerMockRunner.class)
@PrepareForTest({System.class})
public class Xxx {
@Test
public void testThis() throws Exception {
System.setProperty("test-prop", "test-value");
PowerMockito.mockStatic(System.class);
PowerMockito.when(System.getenv(Mockito.eq("name"))).thenReturn("bart");
// you will need to do this (thenCallRealMethod()) for all the other methods
PowerMockito.when(System.getProperty(Mockito.any())).thenCallRealMethod();
Assert.assertEquals("bart", System.getenv("name"));
String value = System.getProperty("test-prop");
Assert.assertEquals("test-value", System.getProperty("test-prop"));
}
}
をスタブ示しています。 There PowerMockito.spy()を使用してこれを行うより洗練された方法ですが、私はそれを覚えていません。
コードによって直接的または間接的に呼び出されるSystem.classの他のすべてのメソッドに対しては、thenCallRealMethod()
を実行する必要があります。
ちょっとテストで環境変数は必要ありません。テストだけで環境変数を使ってコードを実行すると、設定した値に定義されます。 B/cはい、はい、それはテストで定義されていますが、テストが実際のコードを実行するとき、テストされています、それは未定義です。 – PCR
私が追加したコードは、System.getenv( "name")が期待値を返すという事実をデモしています。単体テスト以外のコードでSystem.getenv()を呼び出すと、同様の結果が表示されます(つまり、単体テスト以外のコードでもSystemは動作し続けます)。したがって、あなたの単体テストで、次のような行を持ってください: 'PowerMockito.when(System.getenv(Mockito.eq(" name ")))。thenあなたの環境をセットアップするために返す(" bart ");あなたの非単体テストコードは、それらの値を表示する必要があります – mangotang
これは動作しない場合は、問題をポストバックと私はおそらくそれであなたを助けることができます。 – mangotang