ユニットテスト書いてて、関係ないprivateメソッド通りたくないな〜と思ってググってたらJMockitなるすばらしいものがあったので忘れないうちに!
まず、
Maven Repository: org.jmockit » jmockitからpom.xmlにjMockitを追加!
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.30</version>
</dependency>
JmockitSample.class
package com.example;
public class JmockitSample {
public static void main(String[] args){
System.out.println(new JmockitSample().methodPublic());
System.out.println(methodPublicStatic());
System.out.println(new JmockitSample().callPrivateMethod());
System.out.println(callPrivateStaticMethod());
}
public String methodPublic() {
return "methodPublic";
}
public static String methodPublicStatic() {
return "methodPublicStatic";
}
public String callPrivateMethod(){
return new JmockitSample().methodPrivate();
}
private String methodPrivate() {
return "methodPrivate";
}
public String callPrivateMethodTwoArgs(){
return new JmockitSample().methodPrivate("TEST", 1);
}
private String methodPrivate(String value, Integer no) {
return value + no;
}
public static String callPrivateStaticMethod(){
return JmockitSample.methodPrivateStatic();
}
private static String methodPrivateStatic() {
return "methodPrivateStatic";
}
public void callPrivateVoidMethod(){
new JmockitSample().voidMethodPrivate(1);
}
private void voidMethodPrivate(int no) {}
}
JmockitSampleTest.java
package com.example;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import static org.junit.Assert.assertEquals;
import static org.mockito.MockitoAnnotations.initMocks;
public class JmockitSampleTest {
@InjectMocks
JmockitSample jmockitSample;
private int sum = 0;
@Before
public void setup() {
initMocks(this);
}
@Test
public void mockTest(){
new MockUp<JmockitSample>() {
@Mock
private String methodPrivate() {
return "mocked methodPrivate";
}
@Mock
private String methodPrivate(String value, Integer no) {
return "mocked methodPrivate two args";
}
@Mock
private String methodPrivateStatic() {
return "mocked methodPrivateStatic";
}
@Mock
private void voidMethodPrivate(int no) {
sum += 5;
}
};
assertEquals(new JmockitSample().methodPublic(), "methodPublic");
assertEquals(JmockitSample.methodPublicStatic(), "methodPublicStatic");
assertEquals(new JmockitSample().callPrivateMethod(), "mocked methodPrivate");
assertEquals(new JmockitSample().callPrivateMethodTwoArgs(), "mocked methodPrivate two args");
assertEquals(JmockitSample.callPrivateStaticMethod(), "mocked methodPrivateStatic");
new JmockitSample().callPrivateVoidMethod();
assertEquals(5, sum);
}
}
privateメソッドのモックができましたー