2016-10-14 5 views
2
Class to be tested 
    public class ClassUnderTest { 
    public void functionA() { 
     functionB(); 
     functionC(); 
    } 
    private void functionB() { 
    } 
    private void functionC() { 
    } 
} 

テストクラスPowerMockは

@RunWith(PowerMockRunner.class) 
public class TestClass { 
     @Test 
     public void testFunctionA() throws Exception { 
      ClassUnderTest classUnderTest = PowerMockito.spy(new ClassUnderTest()); 
      classUnderTest.functionA(); 
      PowerMockito.verifyPrivate(classUnderTest).invoke("functionB"); 
      PowerMockito.verifyPrivate(classUnderTest).invoke("functionC"); 
     } 
    } 

回以上のプライベート通話を検証しませんテストケースは正常に動作します。

+0

@bharanitharanこんにちはの2行を追加してみてくださいすることができますか?私は同じ問題を抱えています... – Abdelhafid

答えて

2

PrepareForTestにClassUnderTestを追加する必要があります。

@RunWith(PowerMockRunner.class) 
@PrepareForTest(ClassUnderTest.class) 
public class TestClass { 

@Test 
public void testFunctionA() throws Exception { 
    ClassUnderTest classUnderTest = PowerMockito.spy(new ClassUnderTest()); 
    classUnderTest.functionA(); 

    PowerMockito.verifyPrivate(classUnderTest).invoke("functionB"); 
    PowerMockito.verifyPrivate(classUnderTest).invoke("functionC"); 
} 

私は、テストクラスを実行&プライベートメソッドでsysoutsを追加しました。

0

別のアイデア:それをしないでください。 ではないプライベートメソッドを実行します。その理由は、プライベートです。実際には、いくつかのプライベートメソッドが呼び出されたことを知っているテストを書くのを避けるべきです。

あなたが見ると、のプライベートのアイデアは、変更されることがあります。良いユニットテストはで、あなたのクラスの振る舞いを観察しています - 異なる引数を持つパブリックメソッドを呼び出します。あなたは戻ってくる結果をチェックします。あるいは、テストコードがジョブを実行するための他のメソッドを必要とするときに、依存クラスを使ってオブジェクトをテストクラスに提供することもできます。

実際にはではなく、プライベートメソッドのチェックを開始してください。ポイントは、これらのプライベートメソッドは、外部から観察可能な何かを行う必要があります。どちらかが最終的な「返品」値で作業します。他の方法でチェックされる可能性のある内部状態を変更します。言い換えれば、それらのプライベートメソッドは、テスト中のクラスに他の影響を与えません - とにかく彼らの目的は何ですか?

+0

プライベートメソッドをテストすべきではないというあなたの意見に同意します。しかし、この場合、プライベートメソッドが呼び出されたかどうかを確認するだけで済みます。 – bharanitharan

0

あなたはどんな解決策を持っている、コード

@RunWith(PowerMockRunner.class) 
 
public class TestClass { 
 
     @Test 
 
     public void testFunctionA() throws Exception { 
 
      ClassUnderTest classUnderTest = PowerMockito.spy(new ClassUnderTest()); 
 
      PowerMockito.doNothing().when(classUnderTest, "functionB"); 
 
      PowerMockito.doNothing().when(classUnderTest, "functionC"); 
 
      classUnderTest.functionA(); 
 
      PowerMockito.verifyPrivate(classUnderTest).invoke("functionB"); 
 
      PowerMockito.verifyPrivate(classUnderTest).invoke("functionC"); 
 
     } 
 
    }

関連する問題