2016-07-27 5 views
0

私は以下のようなprotectedメソッドを持っています。これはConstants.javaファイルの最終的な静的変数を使用します。最終的な静的変数を変更してメソッドをテストする

class A { 
    protected Configuration connectConfig() { 
     ConfigDescriptor desc = new ConfigDescriptor.Builder() 
      .project(Constants.REMOTE_CONFIG_PROJECT_NAME) 
      .name(Constants.REMOTE_CONFIG_PROJECT_CONFIG_NAME) 
      .version(Constants.REMOTE_CONFIG_PROJECT_VERSION) 
      .build(); 

     return ConfigProvider.of(desc, getClass().getClassLoader()); 
    } 

    public boolean process() { 
     Configuration config = connectConfig(); 
     if(config == null) { 
      return false; 
     } 
    } 
} 

今私は失敗するremote configのために、この方法processユニットテストしたいです。

に接続するための適切な値があるので、私はちょうどprocess()メソッドをテストすると合格します。テストのために、私はこれらの値をリモートの設定に変更したいですreturnsnull;

注:Mockitoを使用して値をモックさせたくありません。

+0

私は混乱しています...なぜあなたは一時的にconstants.javaの値を変更できませんか? – Austin

+0

@Austin:彼はCIジョブの一部としてテストを実行するので、実際の値を変更したくないです。また、値を疑似するためにMockitoを使用したくありません。 – tushR

+0

コードを変更することはできませんか? – Austin

答えて

1

などMockitoなどモックフレームワークを使用して、あなたはconnectConfig()の結果を指定できるAのスパイを定義することができますが:

A spy = spy(new A()); 
doReturn(null).when(spy).connectConfig(); 

Assert.assertFalse(spy.process()); 
1

あなたはbytemanで一定の値を変更しようとすることができます。それは仕事をするべきです。

0

モックフレームワークを使用することは、ほとんどの場合、この種の質問に対する誤った答えです。代わりに依存関係注入を使用してください。

関連する問題