0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リフレクションを使用してプライベートメソッドを呼び出す方法と、そのメソッドをMockitoでモック化する方法

Posted at

以下に、リフレクションを使用してプライベートメソッドを呼び出す方法と、そのメソッドをMockitoでモック化する方法を示します。

例:リフレクションを使用してプライベートメソッドを呼び出す

まず、プライベートメソッドを持つクラスを定義します。

public class MyClass {
    private String privateMethod() {
        return "Hello, World!";
    }

    public String publicMethod() {
        return privateMethod();
    }
}

次に、リフレクションを使用してプライベートメソッドを呼び出すテストクラスを作成します。

import org.junit.jupiter.api.Test;
import java.lang.reflect.Method;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class MyClassTest {

    @Test
    public void testPrivateMethod() throws Exception {
        MyClass myClass = new MyClass();
        
        // リフレクションを使用してプライベートメソッドにアクセス
        Method privateMethod = MyClass.class.getDeclaredMethod("privateMethod");
        privateMethod.setAccessible(true);
        
        // プライベートメソッドを呼び出す
        String result = (String) privateMethod.invoke(myClass);
        
        // 結果を検証する
        assertEquals("Hello, World!", result);
    }
}

この例では、java.lang.reflect.Methodクラスを使用してプライベートメソッドにアクセスし、setAccessible(true)を呼び出してアクセス可能にしています。その後、invokeメソッドを使用してプライベートメソッドを呼び出しています。


例:リフレクションとMockitoを組み合わせてプライベートメソッドをモック化

次に、リフレクションとMockitoを組み合わせてプライベートメソッドをモック化する方法を示します。

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.lang.reflect.Method;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

public class MyClassTest {

    @Test
    public void testPrivateMethod() throws Exception {
        MyClass myClass = new MyClass();
        
        // MyClassのインスタンスをスパイ化
        MyClass spyMyClass = spy(myClass);
        
        // リフレクションを使用してプライベートメソッドにアクセス
        Method privateMethod = MyClass.class.getDeclaredMethod("privateMethod");
        privateMethod.setAccessible(true);
        
        // プライベートメソッドのモック化
        when(spyMyClass, privateMethod).thenReturn("Mocked Hello, World!");
        
        // パブリックメソッドを呼び出してプライベートメソッドの結果を検証
        String result = spyMyClass.publicMethod();
        assertEquals("Mocked Hello, World!", result);
    }
}

この例では、以下の手順でプライベートメソッドをモック化しています:

テスト対象のクラスのインスタンスを作成します。
Mockitoのspyメソッドを使用してそのインスタンスをスパイ化します。
リフレクションを使用してプライベートメソッドにアクセスします。
Mockitoのwhenメソッドを使用してプライベートメソッドの振る舞いを定義します。
これにより、リフレクションとMockitoを組み合わせてプライベートメソッドのモック化が可能となります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?