Mockito 的用法

Mockito 是一個基於MIT協議的開源java測試框架。
Mockito區別於其餘模擬框架的地方主要是容許開發者在沒有創建「預期」時驗證被測系統的行爲。
對於mock對象的一個評價是測試系統的測試代碼是一個高耦合的,因爲 Mockito試圖經過移除「指望規範」去除expect-run-verify(指望驗證模式)的模式,
所以在耦合度上有所下降。這樣的結果是簡化了測試代碼,使他更易讀和修改了。java

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-all</artifactId>
      <version>1.8.5</version>
      <scope>test</scope>
    </dependency>
步驟 2:  添加java源碼  
public class Person
{
    private final Integer personID;
    private final String personName;
    public Person( Integer personID, String personName )
    {
        this.personID = personID;
        this.personName = personName;
    }
    public Integer getPersonID()
    {
        return personID;
    }
    public String getPersonName()
    {
        return personName;
    }
}
public interface PersonDao
{
    public Person fetchPerson( Integer personID );
    public void update( Person person );
} 
public class PersonService
{
    private final PersonDao personDao;
    public PersonService( PersonDao personDao )
    {
        this.personDao = personDao;
    }
    public boolean update( Integer personId, String name )
    {
        Person person = personDao.fetchPerson( personId );
        if( person != null )
        {
            Person updatedPerson = new Person( person.getPersonID(), name );
            personDao.update( updatedPerson );
            return true;
        }
        else
        {
            return false;
        }
    }
}

--添加單元測試類apache

public class PersonServiceTest
{
    @Mock
    private PersonDao personDAO;
    private PersonService personService;
    @Before
    public void setUp()
        throws Exception
    {
        MockitoAnnotations.initMocks( this );
        personService = new PersonService( personDAO );
    }
    @Test
    public void shouldUpdatePersonName()
    {
        Person person = new Person( 1, "Phillip" );
        when( personDAO.fetchPerson( 1 ) ).thenReturn( person );
        boolean updated = personService.update( 1, "David" );
        assertTrue( updated );
        verify( personDAO ).fetchPerson( 1 );
        ArgumentCaptor<Person> personCaptor = ArgumentCaptor.forClass( Person.class );
        verify( personDAO ).update( personCaptor.capture() );
        Person updatedPerson = personCaptor.getValue();
        assertEquals( "David", updatedPerson.getPersonName() );
        // asserts that during the test, there are no other calls to the mock object.
        verifyNoMoreInteractions( personDAO );
    }
    @Test
    public void shouldNotUpdateIfPersonNotFound()
    {
        when( personDAO.fetchPerson( 1 ) ).thenReturn( null );
        boolean updated = personService.update( 1, "David" );
        assertFalse( updated );
        verify( personDAO ).fetchPerson( 1 );
        verifyZeroInteractions( personDAO );
        verifyNoMoreInteractions( personDAO );
    }
}

 

項目當中使用的另外一種寫法以下:框架

        ApacheHttpClientService apacheHttpClientService = Mockito.mock(ApacheHttpClientService.class);
        ReflectionTestUtils.setField(wsDomainConfService, "apacheHttpClientService", apacheHttpClientService);
        ApacheHttpClientResult result = new ApacheHttpClientResult();
        int statusCode = 200;
        result.setStatusCode(statusCode);
        result.setResponseContent(responseContent);
        // 獲取廠商鑑權1
        Mockito.when(apacheHttpClientService.getForObject(Mockito.any(String.class), Mockito.any(Map.class)))
                .thenReturn(result);
相關文章
相關標籤/搜索