Thursday 8 August 2013

PowerMock: Sample usage of expectNew and expectStrictNew...

Depencencies


  • 'org.powermock:powermock-api-easymock:1.5.1'
  • 'org.powermock:powermock-module-junit4:1.5.1'
  • 'org.easymock:easymock:3.1'

PowerMockDemo

public class PowerMockDemo {
 
  public void someMethod(String someArgument){
  
  ClassA a = new ClassA();
  ClassB b = new ClassB();
  ClassC c = new ClassC();

  c.setFirst(a);
  c.setSecond(b);
  c.execute(someArgument);
 }
}

PowerMockDemoTest

Below is the unit test to test the PowerMockDemo.java.

import static org.powermock.api.easymock.PowerMock.*;
import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(PowerMockDemo.class)
public class PowerMockDemoTest {
 
 private PowerMockDemo toTest;
 
 @Test
 public void testExcuteMethod() throws Exception {
  
  toTest = new PowerMockDemo();
 
  ClassA mockA = createMock(ClassA.class);
  expectNew(ClassA.class).andReturn(mockA);
  
  ClassB mockB = createMock(ClassB.class);
  expectNew(ClassB.class).andReturn(mockB);
  
  ClassC mockC = createStrictMock(ClassC.class);
  expectNew(ClassC.class).andReturn(mockC);
  
  mockC.setFirst(mockA);
  expectLastCall().once();
  
  mockC.setSecond(mockB);
  expectLastCall().once();
  
  mockC.execute(EasyMock.anyObject(String.class));
  expectLastCall().once();
  
  replayAll();
  
  // run the test code
  toTest.someMethod("Hello PowerMock");
  
  verifyAll();
 }
}

In the unit test above we asserted several things when the PowerMockDemo#someMethod(String) is invoked.

PowerMock.createMock() - is used to instantiate a new mock object.

PowerMock.expectNew() - is used to specify that a new a new instance is expected and when it is invoked the specified mock object is returned.

PowerMock.createStrictMock() - is also used to create a new mock object. The only difference is that, when compared to createMock(), the order of method invocations on the mock object is asserted.

References:

1 comment:

  1. Emperor Casino | Shootercasino.com
    Welcome 인카지노 to Emperor Casino! Join 메리트 카지노 고객센터 us at Shootercasino to 제왕카지노 discover why this casino is one of the top places to play poker and play!

    ReplyDelete