ユニットテスト-voidメソッドのテスト方法


voidメソッドのユニットテストを行うと、テスト担当者は迷ってしまいます(多くの人がvoidメソッドにどのようにテストするかを聞いています)、voidのメソッドは値を返さないメソッドです.では、その結果はどうなるのでしょうか.
ここではvoidをどのようにテストすべきかについてお話しします.
まずテストの角度に立ってvoidの方法を分析して、すべての方法の設計はすべて特定の機能があって、以下にいくつかvoidの方法ができることを列挙します(すべてではありませんて、特徴だけを体現します)
1、メソッド内でプライベートなオブジェクトインスタンスを属性設定する
2、ログ出力した
3、別のインスタンスメソッドを呼び出す
4、タイプ変数の初期化(プライベートまたはグローバル)
              5、..............
以上のようにvoidメソッドを分析するのは独立して存在するのではなく、その仕事は必ずある場所に反映され、あるクラス、あるファイル、あるサービスかもしれません.のなど
次にvoidの仕事の反映や影響を分析し、彼を見つけた後、このクラス、このファイル、このサービスを得る方法を見つけます.....
次は一般的な例によれば
         
     public class ServiceHolder {

        private final Set services = new HashSet();

        public void addService(Object service) {
                services.add(service);
        }

        public void removeService(Object service) {
                services.remove(service);
        }
  }
  
void addServiceをテストします(.)この方法は,まずその影響または作用を解析し,servicesという変数に影響し,この変数はプライベートである.この方法の正しさをテストするには,servicesという変数オブジェクトの正しさを検証する必要がある.
このプライベート変数を取得するにはどうすればいいですか?私たちはmock法で作ります.
    
@Test
public void testAddService() throws Exception {
        ServiceHolder tested = new ServiceHolder();
        final Object service = new Object();

        tested.addService(service);

        //  
        Set<String> services = Whitebox.getInternalState(tested,"services");

        assertEquals("Size of the \"services\" Set should be 1", 1, services.size());
        assertSame("The services Set should didn't contain the expect service",
                        service, services.iterator().next());
}

      
Whitebox.getInternalState(tested,"services");   powermocker 。

上記の例では,検証対象を状況に応じて取得する方法が異なり,実際の状況に応じて考慮する簡単なvoidテスト方法を示した.
またPowerMockではorg.powermock.reflect.Whiteboxクラスは、パッケージを迂回するいくつかの方法を提供します.勉強できる...