日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Junit实现接口类测试

發布時間:2025/6/17 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Junit实现接口类测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫接口的目的一般是,讓這個接口的所有實現都具備某個共同的行為。這個行為不僅目前實現的類具備,將來要寫的實現也都必須具備。因此,就需要為這個接口編寫一個通用的測試程序,這個測試程序不僅能測試當前已經實現的類的通用屬性,而且可以不加修改應用于將來要實現的類。

首先引入一個抽象的測試類,該測試類的方法用于測試接口的共同行為。然后使用工廠方法創建接口的對象,以完成測試程序。下面是詳細步驟:

1.???? 選定測試程序要測試的已經具體實現的類。

2.???? 創建一個抽象的測試類,聲明要驗證的功能的測試方法。在具體的測試程序實現中繼承這個測試類,并修改相應的實現方法。

3.???? 在接口的每一個具體實現中都運行該測試程序,但在每個實現中都只驗證接口范圍內的行為[10]

4.???? 在測試程序內,找到創建(接口)對象的代碼,將該代碼改成具體的、已經實現的類的創建方法,但記住將該對象聲明為接口的對象,而不是具體實現的類的對象。重復這一過程,直至測試程序中沒有已經實現的類的對象。

5.???? 聲明你要在測試中調用的抽象方法。

6.???? 現在,測試只涉及接口和一些抽象的測試方法,請將測試程序移入抽象的測試類。

7.???? 重復這一過程直至所有的測試都移入抽象的測試類。

8.???? 重復前面的全部過程,直至除了驗證具體實現的特有的方法的測試程序外,所有的測試代碼都已完成。

下面通過測試java.util.Iterator接口來具體說明這種技巧。首先讓我們看代碼ListIteratorTest,這是測試java.util.Listiterator接口的一個具體實現。

package junit.cookbook.test;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.NoSuchElementException;

import static org.junit.Assert.*;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

?

public class ListIteratorTest {

?????? private Iterator noMoreElementsIterator;

?????? protected abstract Iterator makeNoMoreElementsIterator();

?

?????? @Before

?????? public void setUp() throws Exception {

????????????? List empty = new ArrayList();

????????????? noMoreElementsIterator = empty.iterator();

?????? }

?????? @Test

?????? public void testHasNextNoMoreElements() {

????????????? assertFalse(noMoreElementsIterator.hasNext());

?????? }

?????? @Test

?????? public void testNextNoMoreElements() {

????????????? try {

???????????????????? noMoreElementsIterator.next();

???????????????????? fail("No exception with no elements remaining!");

????????????? } catch (NoSuchElementException expected) {

????????????? }

?????? }

?????? @Test

?????? public void testRemoveNoMoreElements() {

????????????? try {

???????????????????? noMoreElementsIterator.remove();

???????????????????? fail("No exception with no elements remaining!");

????????????? } catch (IllegalStateException expected) {

????????????? }

?????? }

}

接著讓引入抽象的IteratorTest測試類,并將ListIteratorTest類的實際的實現添加到IteratorTest。結果如下所示:

package junit.cookbook.test;

import java.util.Iterator;

import java.util.NoSuchElementException;

import static org.junit.Assert.*;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

?

public abstract class IteratorTest {

?????? private Iterator noMoreElementsIterator;

?????? protected abstract Iterator makeNoMoreElementsIterator();

?????? @Before

?????? public void setUp() throws Exception {

????????????? noMoreElementsIterator = makeNoMoreElementsIterator();

?????? }

?????? @Test

?????? public void testHasNextNoMoreElements() {

????????????? assertFalse(noMoreElementsIterator.hasNext());

?????? }

?????? @Test

?????? public void testNextNoMoreElements() {

????????????? try {

???????????????????? noMoreElementsIterator.next();

???????????????????? fail("No exception with no elements remaining!");

????????????? } catch (NoSuchElementException expected) {

????????????? }

?????? }

?????? @Test

?????? public void testRemoveNoMoreElements() {

????????????? try {

???????????????????? noMoreElementsIterator.remove();

???????????????????? fail("No exception with no elements remaining!");

????????????? } catch (IllegalStateException expected) {

????????????? }

?????? }

}

?

只要我們實現了makeNoMoreElementsIterator()方法,我們就可以將所有的測試移入IteratorTest類。我們只需要將這個方法封裝到ListIteratorTest類中:

package junit.cookbook.test;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import org.junit.After;

import org.junit.Before;

import temp.IteratorTest;

?

public class ListIteratorTest extends IteratorTest {

?????? protected Iterator makeNoMoreElementsIterator() {

????????????? List empty = new ArrayList();

????????????? return empty.iterator();

?????? }

}

?ListIteratorTest繼承我們的抽象類IteratorTest。

我們的ListIteratorTest類中實現的創建方法返回一個iterator而不是一個空列表。類似地,如果以測試一個基于Set類的iterator,你應該創建一個繼承IteratorTestSetIteratorTest類,這個類的makeNoMorelementsterator()方法也應該返回相應的iterator而不是一個空的Set對象。

這個抽象的test case能正常工作的原因是Junit中的測試等級規定。一個TestCase類在繼承其父類時將同時繼承父類所有的測試。在例子中,ListIteratorTest繼承IteratorTest,所以只要在test runner中運行ListIteratorTestIteratorTest中的測試都將得到運行。

值得一提的是Eric Armstrong的觀點,他是Yahoo!JUnit社區常客:一個接口只定義語法,而不指定語義,雖然他們經常被實現。另一方面,一個相關的test Suite可以指定語義。我們應該給每一個公用的接口配備一個test suite當我們在框架中發布一個接口或者抽象類的時候,最好同時寫一個相關的抽象的Test Case,以驗證框架在所有客戶端中的最重要的期望值。

最后,你會有同時實現了多個接口的類。建議你獨立地測試每個接口的功能,而不要拘泥于那個一個test case類測試一個類的死板規定

轉載于:https://www.cnblogs.com/Automation_software/archive/2011/01/24/1943054.html

總結

以上是生活随笔為你收集整理的Junit实现接口类测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费网站在线观看人数在哪动漫 | 毛茸茸毛片 | 久久国产一级片 | 蜜桃传媒一区二区亚洲av | 国产美女三级无套内谢 | 国产精品亚洲视频 | 国产在线传媒 | 午夜亚洲aⅴ无码高潮片苍井空 | 一级免费黄色 | 国产日日夜夜 | 欧美一级乱黄 | 中文国产在线观看 | 特级毛片爽www免费版 | 免费成人美女在线观看. | 依人久久 | 播播网色播播 | 欧美乱大交xxxxx潮喷l头像 | 少妇熟女高潮流白浆 | 麻豆精品视频在线观看 | 久久高清精品 | 91狠狠操| 日本天堂网在线观看 | 丁香六月天婷婷 | 69精品丰满人妻无码视频a片 | 四虎永久在线观看 | 成人久久免费视频 | 久久精品色妇熟妇丰满人妻 | www.色99| 国产地址 | 国产大片91 | 国产亚洲精品久久久久婷婷瑜伽 | 免费在线观看中文字幕 | 国产新婚疯狂做爰视频 | 亚洲国产精品毛片av不卡在线 | 欧美日韩一二三四 | 国产乱码精品一区二区三区中文 | 黄色片网站国产 | 日美女逼逼 | 国产香蕉尹人视频在线 | 全黄一级男人和女人 | 男女男精品视频站 | 日本网站黄色 | 成年人视频在线免费观看 | 中文字幕日韩精品亚洲一区小树林 | 日韩欧美在线视频免费观看 | 国产91熟女高潮一区二区 | 99国产精品一区二区三区 | 操屁股视频 | 精品xxxxx | 久久精品国产视频 | 粉嫩小箩莉奶水四溅在线观看 | 亚洲精品高清在线观看 | 亚洲成人天堂 | 亚洲欧美中文字幕5发布 | 在线观看日批 | 免费视频一区 | 久久婷婷精品 | 五月婷婷综合在线观看 | 欧美视频一区二区三区四区在线观看 | 国产一区二区三区免费观看 | 欧美国产日韩精品 | 蜜桃免费在线视频 | 一女双乳被两男吸视频 | 午夜污| 麻豆视频污 | 成人毛片18女人毛片 | 欧美成人手机在线 | 亚洲制服丝袜诱惑 | 欧美二区在线 | 久久中文字幕在线 | 久久精品视频免费播放 | 亚洲高清二区 | 亚洲最大的黄色网 | 日本高清在线观看 | 亚洲国产欧美一区二区三区深喉 | 99riav1国产精品视频 | 少妇一级淫片免费视频 | 成人无码av片在线观看 | 免费黄色小视频 | 天堂在线网 | 麻豆久久久 | 国产在线观 | 国产11页 | 18禁肉肉无遮挡无码网站 | 国产又粗又猛又爽又黄的网站 | 亚洲一线二线在线观看 | 亚洲精品18| 奇米影视第4色 | 天天操天天射天天舔 | 丰满岳乱妇国产精品一区 | 中国女人毛茸茸 | 91视频在线免费 | 福利小视频在线观看 | 国产高清免费av | 自拍偷拍第二页 | 91精品视频免费 | 一区二区欧美在线 | 天天干国产 | 国产经典一区二区 |