差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
study:java:powermock:mocking [2020/05/12 00:49] – [Using an ArgumentCaptor of Collection type] bananastudy:java:powermock:mocking [2020/05/12 01:19] (現在) – [Mock Protected Parent Method] banana
行 123: 行 123:
 <code java> <code java>
 public class TestPersonService { public class TestPersonService {
- @Captor +    @Captor 
- ArgumentCaptor<List<Person>> captor+    ArgumentCaptor<List<Person>> captor
  
- @Before +    @Before 
- public void before() { +    public void before() { 
-  MockitoAnnotations.initMocks(this); +        MockitoAnnotations.initMocks(this); 
- }+    }
  
- @Test +    @Test 
- public void testService001() { +    public void testService001() { 
-  PersonService service = ... +        PersonService service = ... ;
-   +
-  service.execute(); +
-   +
-  verify(service).update(captor.capture());+
  
-  assertThat(captor.getValue()).isEmpty(); +        service.execute(); 
- }+ 
 +        verify(service).update(captor.capture()); 
 + 
 +        assertThat(captor.getValue()).isEmpty(); 
 +    }
  
 } }
 </code> </code>
 +
 +===== Mock Protected Parent Method  =====
 +Parent classにあるprotected methodの振る舞いを定義する例を紹介する。
 +
 +親クラスの例を次に示す。
 +<code java>
 +package parent;
 +
 +public class Parent {
 +
 +    protected void foo(String arg1, String arg2) {
 +        //some logic here
 +    }
 +}
 +</code>
 +
 +子クラスの例を次に示す。
 +<code java>
 +package child;
 +
 +import parent.Parent;
 +
 +public class Child extends Parent {
 +
 +    public String bar() {
 +        //call parent method
 +        this.foo();
 +
 +        //Child logic here
 +    }
 +}
 +</code>
 +
 +テストクラスの例を次に示す。
 +<code java>
 +package child;
 +
 +import parent.Parent;
 +import static org.mockito.Matchers.anyObject;
 +import static org.powermock.api.mockito.PowerMockito.doNothing;
 +import static org.powermock.api.mockito.PowerMockito.spy;
 +import static org.powermock.api.mockito.PowerMockito.when;
 +import org.powermock.core.classloader.annotations.PrepareForTest;
 +
 +@PrepareForTest({Parent.class, Child.class})
 +public class ChildTest {
 +    //Class Under Test
 +    Child cut;
 +
 +    @Before
 +    public void setUp() throws Exception {
 +        //Partial mock to mock methods in parent class
 +        cut = spy(new Child());
 +
 +        //stub parent foo method
 +        doNothing().when(cut, "foo", anyObject(), anyObject());
 +    }
 +
 +    @Test
 +    public void testBar() {
 +        //call test method
 +        cut.bar();
 +        //assertion here
 +    }
 +}
 +
 +</code>
 +ここでは、親クラスのfooメソッドが呼ばれた際、何もしない(doNothing)を実装している。
 +

QR Code
QR Code study:java:powermock:mocking (generated for current page)