在單元測試中使用EasyMock
我們每天的開發中都要編寫大量的單元測試,很多單元測試的物件是相對獨立的,例如一個所得稅計算的模組,但是更多的單元測試需要依賴其他的元件或者服務。因此,我們需要EasyMock來無縫的連線這些元件。Mock的意思就是空的,不存在的東西。
EasyMock剛剛釋出了2.2版本,它開始使用很多基於jdk 1.5的特性。
下面我們舉一個例子:
假設定義一個如下的介面:
public interface ISimpsonService {
IEpisode getEpisode(int number);
}
public interface IEpisode {
int getNumber();
String getTitle();
InputStream getDataAsStream();
}
該介面的實現為
public class ClientSimpsonService implements ISimpsonService { private ISimpsonService remoteSimpsonService; public ClientSimpsonService(ISimpsonService remoteSimpsonService) { this.remoteSimpsonService = remoteSimpsonService; } public IEpisode getEpisode(int episodeNumber) { return null; }}
對該服務的單元測試如下
public class ClientSimpsonServiceTest extends TestCase { public void testClientSimpsonService() { try { new ClientSimpsonService(null); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } }
我們可以看到因為沒有remoteSimpsonService,所以我們只傳一個null給ClientSimpsonService,
這樣是無法完成測試的。所以我們把還沒有寫的remoteSimpsonService用mock替代。
import static org.easymock.EasyMock.createMock;import junit.framework.TestCase;public class ClientSimpsonServiceTest extends TestCase { private ISimpsonService remoteSimpsonServiceMock; protected void setUp() throws Exception { super.setUp(); remoteSimpsonServiceMock = createMock(ISimpsonService.class); } public void testClientSimpsonService() { try { new ClientSimpsonService(null); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException e) { // expected } new ClientSimpsonService(remoteSimpsonServiceMock); }}
上面的黑體程式碼中,我們建立了一個ISimpsonService.class的mock,它擁有和ISimpsonService一樣
的
介面。
同樣的方法,我們可以定義ISimpsonService返回的物件IEpisode
import static org.easymock.EasyMock.createMock;import static org.easymock.EasyMock.expect;import static org.easymock.EasyMock.replay;import static org.easymock.EasyMock.verify;import junit.framework.TestCase;public class ClientSimpsonServiceTest extends TestCase { private IEpisode episode17Mock; private ISimpsonService remoteSimpsonServiceMock; protected void setUp() throws Exception { super.setUp(); episode17Mock = createMock(IEpisode.class); remoteSimpsonServiceMock = createMock(ISimpsonService.class); }... public void testGetEpisode() throws Exception { expect(remoteSimpsonServiceMock.getEpisode(17)) .andReturn(episode17Mock); replay(remoteSimpsonServiceMock); ISimpsonService clientSimpsonService = new ClientSimpsonService(remoteSimpsonServiceMock); IEpisode result = clientSimpsonService.getEpisode(17); verify(remoteSimpsonServiceMock); assertEquals(episode17Mock, result); }
上文僅僅是拋磚引玉,想了解更多EasyMock,請參看
http://today.java.net/pub/a/today/2006/06/20/getting-started-with-easymock-2.html
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=817575
相關文章
- Mock 在 Python 單元測試中的使用MockPython
- 單元測試:單元測試中的mockMock
- 單元測試在Unity中的應用Unity
- 在Nodejs中貫徹單元測試NodeJS
- java中的單元測試Java
- c#中單元測試C#
- 單元測試工具 TestNG 使用
- 在Hadoop中使用MRUnit進行單元測試Hadoop
- 測試 之Java單元測試、Android單元測試JavaAndroid
- Python中的單元測試框架:使用unittest進行有效測試Python框架
- 在.NET開發中的單元測試工具之——NUnit
- 使用JUnit進行單元測試
- 使用junit單元測試SpringMvcSpringMVC
- Junit 單元測試使用總結
- Cmocka 單元測試配置與使用Mock
- .NET 專案中的單元測試
- 在Model層如何做單元測試?
- [iOS單元測試系列]單元測試編碼規範iOS
- PHP單元測試框架PHPUnit的使用PHP框架
- 使用Jest進行React單元測試React
- 使用 Spring 進行單元測試Spring
- 使用 QUnit 進行 JavaScript 單元測試JavaScript
- Flutter 單元測試Flutter
- Go單元測試Go
- 單元測試工具
- iOS 單元測試iOS
- 前端單元測試前端
- golang 單元測試Golang
- PHP 單元測試PHP
- phpunit單元測試PHP
- JUnit單元測試
- unittest單元測試
- Junit 單元測試.
- AutoMapper在MVC中的運用01-配置、使用、單元測試、舉例APPMVC
- 在開發過程中怎樣利用單元和功能測試
- 前端測試:Part II (單元測試)前端
- .net持續整合單元測試篇之單元測試簡介以及在visual studio中配置Nunit使用環境
- 實戰指南:使用 xUnit.DependencyInjection 在單元測試中實現依賴注入【完整教程】依賴注入