2017-06-21 8 views
3

私はそれに静的メソッドを持つメソッドでMockitoを使用しようとしています。私はPowerMockを使うことができないので、非静的メソッドでメソッドをラップしたのです。Mockitoを静的メソッドで正しく使用するにはどうすればいいですか?

public class WrapperUtil { 

    public String getURLContent(String path) throws IOException{ 
     URL url = new URL(path); 
     return IOUtils.toString(url); 
    } 
} 

私はWrapperUtilクラスを2つの異なる方法でテストしました。 1つのテストは機能しましたが、WrapperUtilクラスのカバレッジは提供されませんでした。もう1つは静的メソッドに関連するnullポインタ例外をスローしています。

これは動作するものの、どのようなカバレッジも提供していません。

@RunWith(MockitoJUnitRunner.class) 
public class WrapperUtilTest { 

    @InjectMocks 
    WrapperUtil ioutils; 


    @Before 
    public void setUp() throws Exception { 

     ioutils = new WrapperUtil(); 
    } 

    @Test 
    public void testGetUrlContent() throws IOException { 

     WrapperUtil ioutilsSpy = Mockito.spy(ioutils); 
     Mockito.doReturn("test").when(ioutilsSpy).getURLContent(Mockito.anyString()); 
     assertTrue(ioutils2.getURLContent("test").contains("test")); 

    } 

} 

これは動作しないものである:

@RunWith(MockitoJUnitRunner.class) 
public class WrapperUtilTest { 

    @InjectMocks 
    WrapperUtil ioutils; 


    @Before 
    public void setUp() throws Exception { 

     ioutils = new WrapperUtil(); 
    } 

    @Test 
    public void testGetUrlContent() throws IOException { 

     WrapperUtil ioutilsSpy = Mockito.spy(ioutils); 
     Mockito.when(ioutilsSpy).getURLContent(Mockito.anyString()).thenReturn("test"); 
     assertTrue(ioutils2.getURLContent("test").contains("test")); 

    } 

} 

は、どのように私はこの作業を行うと、PowerMockitoを使用せずに、コードカバレッジを達成することができますか?手伝ってくれてどうもありがとう。ここ

+0

関連しない:コード例に誤字があります。 'ioutils'を宣言しますが、' ioutils2'を使います。 – GhostCat

+0

それほど不明瞭なものではありません。私は特にあなたの態度が高品質を達成するのが好きです(私の答えはここでは別の方向に向いていますが)**そして**あなたがPowerMockを避けたいと理解しています。私はあなたのためにこれをさらに3回upvoteすることができればいいと思う! – GhostCat

+0

最後に、Apache IOUtils.toString()を使用していると仮定します。このメソッドは*推奨されていない*ので、代わりにエンコーディングを使用する必要があります。 – GhostCat

答えて

1

私の2セント:

  • 私もさらに一歩進み、一方の機能
  • を示すためインタフェースを定義し、私はラッパーをテストする「船外に」行かないだろう実装

ポイントは次のとおりです。ここグルーコードのほんの少しがあります。もしあなたがのテストこのコードが動作することを確認するには、このコードを実行することができます - あなたは大丈夫です。

言い換えれば、100%カバレッジを達成するためにハングアップしないようにしてください。範囲はツールで、のヘルプのコード品質を達成するように設計されています。

100%カバー率は「100%コード品質」になります!

「常に正しいことをやろう」とすることで、コード品質を達成できます。

ここで、「正しいこと」は100%カバレッジを目指すものではありません。

PowerMock(ito)に目を向けることなく、その目標を達成できないと思います。 PowerMock(ito)を避けること自体が良いことです。私の提案は、このクラスの100%カバレッジに到達できないということを受け入れることです。

もし私が自分の時間を費やすなら、はこのクラスをカバレッジランから除外します。

関連する問題