Powermockシミュレーションプライベートメソッド

2355 ワード

ユニットテストでは、クラスのプライベートメソッドをシミュレートする必要がある場合があります.powermockはこのような機能を提供しています.
以下はテストするクラスです
public class CalcService {

       public int increase(int i){
           return i+j(i);
       }
     
       private int j(Integer j){
           return j;
       }
}

 
以下はテストクラスです
import org.easymock.EasyMock;
import org.junit.Test;
import org.powermock.modules.junit4.PowerMockRunner;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import com.tdd.powermock.CalcService;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.easymock.PowerMock.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest(CalcService.class)
public class CalcServiceTest {
    @Test
    public void testIncrease() throws Exception{
        int expected=3;
        CalcService tested = createPartialMock(CalcService.class, "j");
        expectPrivate(tested, "j",1).andReturn(2);
        replay(tested);
        assertTrue(expected==tested.increase(1));
        verify(tested);
        
    }
}

 
これらのコードは簡単で、分かりやすいと信じています.また、必要なjarパッケージは以下のように、mavenで依存を追加します.
<dependency>
			<groupId>org.easymock</groupId>
			<artifactId>easymock</artifactId>
			<version>3.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8</version>
		</dependency>
			<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-module-junit4</artifactId>
			<version>1.4.10</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.powermock</groupId>
			<artifactId>powermock-api-easymock</artifactId>
			<version>1.4.10</version>
			<scope>test</scope>
		</dependency>