質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
モック

モックとは、テスト対象の間接出力が正しいことを確認するためのもの。テスト対象のメソッドが相互に動作するための環境を提供する。インスタンスはテスト用に生成された専用の環境の中で動作する。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Q&A

0回答

1926閲覧

【PowerMock】System.getenv().get で null が返る

Santea

総合スコア12

モック

モックとは、テスト対象の間接出力が正しいことを確認するためのもの。テスト対象のメソッドが相互に動作するための環境を提供する。インスタンスはテスト用に生成された専用の環境の中で動作する。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

0グッド

1クリップ

投稿2018/11/07 10:52

編集2018/11/08 04:29

PowerMock を使って System.getenv().get をモック化しようとしています。

テスト対象のクラス:

java

1public class SSOClient { 2 3 private SSOClient() {}; 4 5 public static Keycloak getInstance(){ 6 7 return Keycloak.getInstance(System.getenv().get(SSOConstants.KEY_SERVER_URL), 8 System.getenv().get(SSOConstants.KEY_REALM), 9 System.getenv().get(SSOConstants.KEY_USERNAME), 10 System.getenv().get(SSOConstants.KEY_PASSWORD), 11 System.getenv().get(SSOConstants.KEY_CLIENT_ID), 12 System.getenv().get(SSOConstants.KEY_CLIENT_SECRET)); 13 } 14}

テストクラス:

java

1@RunWith(PowerMockRunner.class) 2@PrepareForTest({Keycloak.class}) 3public class SSOClientTest { 4 5 private static String SERVER_URL = "localhost"; 6 private static String REALM = "realm"; 7 private static String USERNAME = "username"; 8 private static String PASSWORD = "password"; 9 private static String CLIENT_ID = "client_id"; 10 private static String CLIENT_SECRET = "client_secret"; 11 12 @Before 13 public void setUp() throws Exception { 14 15 PowerMockito.mockStatic(Keycloak.class); 16 17 Map<String, String> envMap = new HashMap<>(); 18 envMap.put(SSOConstants.KEY_SERVER_URL, SERVER_URL); 19 envMap.put(SSOConstants.KEY_REALM, REALM); 20 envMap.put(SSOConstants.KEY_USERNAME, USERNAME); 21 envMap.put(SSOConstants.KEY_PASSWORD, PASSWORD); 22 envMap.put(SSOConstants.KEY_CLIENT_ID, CLIENT_ID); 23 envMap.put(SSOConstants.KEY_CLIENT_SECRET, CLIENT_SECRET); 24 PowerMockito.mockStatic(System.class); 25 PowerMockito.when(System.getenv()).thenReturn(envMap); 26 } 27 28 @Test 29 public void testGetInstance() throws Exception { 30 31 Keycloak client = SSOClient.getInstance(); 32 33 PowerMockito.verifyStatic(Keycloak.class, VerificationModeFactory.times(1)); 34 ArgumentCaptor<String> serverUrl = ArgumentCaptor.forClass(String.class); 35 ArgumentCaptor<String> realm = ArgumentCaptor.forClass(String.class); 36 ArgumentCaptor<String> username = ArgumentCaptor.forClass(String.class); 37 ArgumentCaptor<String> password = ArgumentCaptor.forClass(String.class); 38 ArgumentCaptor<String> clientId = ArgumentCaptor.forClass(String.class); 39 ArgumentCaptor<String> clientSecret = ArgumentCaptor.forClass(String.class); 40 41 Keycloak.getInstance(serverUrl.capture(), realm.capture(), username.capture(), password.capture(), clientId.capture(), clientSecret.capture()); 42 43 // これは通ります 44 assertThat(System.getenv().get(SSOConstants.KEY_SERVER_URL), is(SERVER_URL)); 45 46 assertThat(serverUrl.getAllValues().get(0), is(SERVER_URL)); 47 assertThat(realm.getAllValues().get(0), is(REALM)); 48 assertThat(username.getAllValues().get(0), is(USERNAME)); 49 assertThat(password.getAllValues().get(0), is(PASSWORD)); 50 assertThat(clientId.getAllValues().get(0), is(CLIENT_ID)); 51 assertThat(clientSecret.getAllValues().get(0), is(CLIENT_SECRET)); 52 } 53}

assertThat(System.getenv().get(SSOConstants.KEY_SERVER_URL), is(SERVER_URL)); は通るにも関わらず、それ以降の System.getenv().get で Null が返ります。

java.lang.AssertionError: Expected: is "localhost" but: was null ``` 何か使い方を間違っていますでしょうか? ご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問