没有什么比一个完整的实例来的更有说服力。 实例使用的是jmockit-1.9.jar
package com.sample.service.cert;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.sample.bean.cert.OriginalCertBean;
import com.sample.dao.cert.OriginalCertDao;
import com.sample.service.cert.impl.OriginalCertServiceImpl;
import com.sample.service.folder.FolderService;
import com.sample.util.constants.CertProcessStatus;
import com.sample.util.exception.BusinessException;
import junit.framework.TestCase;
import mockit.Deencapsulation;
import mockit.Delegate;
import mockit.Mocked;
import mockit.NonStrictExpectations;
import mockit.integration.junit4.JMockit;
@RunWith(JMockit.class)
public class OriginalCertServiceImplTest extends TestCase{
@Mocked
private OriginalCertDao mockOriginalCertDao;
private OriginalCertServiceImpl originalCertServiceImpl;
@Mocked
private FolderService mockFolderService;
/**
* Before testing,preparing resources
*/
@Before
public void init(){
originalCertServiceImpl = new OriginalCertServiceImpl();
Deencapsulation.setField(originalCertServiceImpl, "originalCertDao",mockOriginalCertDao);
Deencapsulation.setField(originalCertServiceImpl,"FolderService",mockFolderService);
}
/**
* After the test is complete,clear up the resources
*/
@After
public void destory(){
}
@Test
public void testApproveCert(){
new NonStrictExpectations() {
{
//service方法中调用的dao方法都需要进行mock
mockOriginalCertDao.updateCert((OriginalCertBean) any);
result = new Delegate(){
void updateCert(OriginalCertBean cert){
cert.setCertId(null);
}
};
mockFolderService.deleteCertEntityFromFolder((Long)anyLong);
result = new Delegate() {
Long deleteCertEntityFromFolder(Long entityId){
Long certFolderId = 003L;
return 0L;
}
};
}
};
OriginalCertBean originalCert = new OriginalCertBean();
originalCert.setCertId(0L);
originalCert.setGtFlag(false);
originalCert.setCopywriterFlag(false);
originalCert.setProcessStatus(CertProcessStatus.Submitted.toString());
originalCertServiceImpl.approveCert(originalCert);
MatcherAssert.assertThat(originalCert.getProcessStatus(),Matchers.is(CertProcessStatus.Approved.toString()));
originalCert.setProcessStatus(CertProcessStatus.Approved.toString());
try {
originalCertServiceImpl.approveCert(originalCert);
} catch(BusinessException e) {
MatcherAssert.assertThat(originalCert.getProcessStatus(),Matchers.is(CertProcessStatus.Approved.toString()));
}
}
}