A. java中框架Junit應該怎麼使用
JUnit
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟體如何(How)完成功能和完成什麼樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。
更多JUnit信息
Cactus
Cactus是一個基於JUnit框架的簡單測試框架,用來單元測試服務端Java代碼。Cactus框架的主要目標是能夠單元測試服務端的使用Servlet對象的Java方法如HttpServletRequest,HttpServletResponse,HttpSession等
更多Cactus 信息
Abbot
Abbot是一個用來測試Java GUIs的框架。用簡單的基於XML的腳本或者Java代碼,你就可以開始一個GUI。
更多Abbot信息
JUnitPerf
Junitperf實際是junit的一個decorator,通過編寫用於junitperf的單元測試,我們也可使測試過程自動化。
更多JUnitPerf信息
DbUnit
DbUnit是為資料庫驅動的項目提供的一個對JUnit 的擴展,除了提供一些常用功能,它可以將你的資料庫置於一個測試輪回之間的狀態。
更多DbUnit信息
Mockrunner
Mockrunner用在J2EE環境中進行應用程序的單元測試。它不僅支持Struts actions, servlets,過濾器和標簽類還包括一個JDBC和一個JMS測試框架,可以用於測試基於EJB的應用程序。
更多Mockrunner信息
DBMonster
DBMonster是一個用生成隨機數據來測試sql資料庫的壓力測試工具。
更多DBMonster信息
MockEJB
MockEJB是一個不需要EJB容器就能運行EJB並進行測試的輕量級框架。
更多MockEJB信息
StrutsTestCase
StrutsTestCase 是Junit TestCase類的擴展,提供基於Struts框架的代碼測試。StrutsTestCase同時提供Mock 對象方法和Cactus方法用來實際運行Struts ActionServlet,你可以通過運行servlet引擎來測試。因為StrutsTestCase使用ActionServlet控制器來測試你的代碼,因此你不僅可以測試Action對象的實現,而且可以測試mappings,from beans以及forwards聲明。StrutsTestCase不啟動servlet容器來測試struts應用程序(容器外測試)也屬於Mock對象測試,但是與EasyMock不同的是,EasyMock是提供了創建Mock對象的API,而StrutsTest則是專門負責測試Struts應用程序的Mock對象測試框架。
更多StrutsTestCase信息
JFCUnit
JFCUnit使得你能夠為Java偏移應用程序編寫測試例子。它為從用代碼打開的窗口上獲得句柄提供了支持;為在一個部件層次定位部件提供支持;為在部件中發起事件(例如按一個按鈕)以及以線程安全方式處理部件測試提供支持。
更多JFCUnit信息
JTestCase
JTestCase 使用XML文件來組織多測試案例數據,聲明條件(操作和期望的結果),提供了一套易於使用的方法來檢索XML中的測試案例,按照數據文件的定義來聲明結果。
更多JTestCase信息
SQLUnit
SQLUnit是一個單元測試框架,用於對資料庫存儲過程進行加歸測試。用 Java/JUnit/XML開發。
更多SQLUnit信息
JTR
JTR (Java Test Runner)是一個開源的基於反轉控制(IOC)的J2EE測試框架。它允許你構建復雜的J2EE測試套件(Test Suites)並連到應用伺服器執行測試,可以包括多個測試實例。JTR的licensed是GPL協議。
更多JTR信息
Marathon
Marathon是一個針對使用Java/Swing開發GUI應用程序的測試框架,它由recorder, runner 和 editor組成,測試腳本是python代碼。Marathon的焦點是放在最終用戶的測試上。
更多Marathon信息
TestNG
TestNG是根據JUnit 和 NUnit思想而構建的一個測試框架,但是TestNG增加了許多新的功能使得它變得更加強大與容易使用比如:
*支持JSR 175注釋(JDK 1.4利用JavaDoc注釋同樣也支持)
*靈活的Test配置
*支持默認的runtime和logging JDK功能
*強大的執行模型(不再TestSuite)
*支持獨立的測試方法。
更多TestNG信息
Surrogate Test framework
Surrogate Test framework是一個值得稱贊單元測試框架,特別適合於大型,復雜Java系統的單元測試。這個框架能與JUnit,MockEJB和各種支持模擬對象(mock object )的測試工具無縫給合。這個框架基於AspectJ技術。
更多Surrogate Test framework信息
MockCreator
MockCreator可以為給定的interface或class生成模擬對象(Mock object)的源碼。
更多MockCreator信息
jMock
jMock利用mock objects思想來對Java code進行測試。jMock具有以下特點:容易擴展,讓你快速簡單地定義mock objects,因此不必打破程序間的關聯,讓你定義靈活的超越對象之間交互作用而帶來測試局限,減少你測試地脆弱性。
更多jMock信息
EasyMock
EasyMock為Mock Objects提供介面並在JUnit測試中利用Java的proxy設計模式生成它們的實例。EasyMock最適合於測試驅動開發。
更多EasyMock信息
Grinder
Grinder是一個開源的Java負載測試框架,它通過很多負載注射器來為分布式測試提供了便利。
支持用於執行測試腳本的Jython腳本引擎
HTTP測試可通過HTTP代理進行管理。
更多Grinder信息
XMLUnit
XMLUnit不僅有Java版本的還有.Net版本的。Java開發的XMLUnit提供了兩個JUnit 擴展類XMLAssert和XMLTestCase,和一組支持的類。這些類可以用來比較兩張XML之間的不同之處,展示XML利用XSLT來,校驗XML,求得XPath表達式在XML中的值,遍歷XML中的某一節點利DOM展開,
更多XMLUnit信息
Jameleon
Jameleon一個自動化測試工具。它被用來測試各種各樣的應用程序,所以它被設計成插件模式。為了使整個測試過程變得簡單Jameleon提供了一個GUI,因此Jameleon實現了一個Swing 插件。
更多Jameleon信息
J2MEUnit
J2MEUnit是應用在J2ME應用程序的一個單元測試框架。它基於JUnit.
更多J2MEUnit信息
Jetif
Jetif是一個用純Java實現的回歸測試框架。它為Java程序單元測試以及功能測試提供了一個簡單而且可 伸縮的架構,可以用於個人開發或企業級開發的測試。它容易使用,功能強大,而且擁有一些企業級測試的 重要功能。Jetif來源於JUnit, JTestCase以及TestNG的啟發,有幾個基本的概念直接來自於JUnit, 比如說斷言機制,Test Listener的概念,因此從JUnit轉到Jetif是非常容易的。
更多Jetif信息
GroboUtils
GroboUtils使得擴展Java測試變得可能。它包括用在Java不同方面測試的多個子項目。在GroboUtils中最常被到的工具是:多線程測試(multi-threaded tests),整體單元測試(hierarchial unit tests),代碼覆蓋工具(code coverage tool)。
更多GroboUtils信息
Testare
TESTARE是用來簡化分布式應用程序(比如:在SERVLETS,JMS listeners, CORBA ORBs或RMI環境下)測試開發過程的一個測試框架.
更多Testare信息
MockLib
MockLib是一個很小的包所以可容易地動態創建一個模擬對象.你可以從模擬的系統中拋出異常來確保你的系統能夠正確處理錯誤.它同樣也是一個線程安全的模擬對象庫.
更多MockLib信息
JellyUnit
JellyUnit是一個基於Jelly的JUnit測試機制.它允許用Jelly腳本來完成單元測試.尤其是對於XML,XPath,SQL,HTTP,JMS和SOAP交互的測試特別有用.
更多JellyUnit信息
Pisces
這個項目繼承於JUnit目的是提供一個分布式的測試環境.它給開發者/測試人員一個運行遠程JUnits和復雜測試案例的能力,這個案例由幾個並行運行的遠程JUnit測試組成。
更多Pisces信息
JUnitEE
JUnitEE是對JUnit的一個簡單擴展,可以支持在一個J2EE應用程序伺服器上執行標準的測試案例。它主要由一個把測試結果輸出為html的servlet組成。
更多JUnitEE信息
B. Junit怎麼測試資料庫查詢方法
@Test
public void jdbcTest() throws ClassNotFoundException, SQLException{
//載入MySql的驅動類
Class.forName("com.mysql.jdbc.Driver") ; //環境變數中需要有mysql的驅動包
//簡歷鏈接
String url = "jdbc:mysql://localhost:3306/test" ;
String username = "root" ;
String password = "root" ;
Connection con = DriverManager.getConnection(url , username , password ) ;
//創建stat 並執行查詢,獲得結果集resultSet
Statement stat = con.createStatement();
ResultSet resultSet = stat.executeQuery("select * from 你的表 ");
//遍歷查詢結果集
//1 獲得元數據(就是欄位名稱)
ResultSetMetaData metad = resultSet.getMetaData();
int column = metad.getColumnCount();
System.out.println("查詢結果為【"+column+"】列");
// System.out.println("查詢結果為【"+metad.+"】條");
StringBuffer sb = new StringBuffer();
while(resultSet.next()){
for (int i = 0; i < column; i++) {
sb.append("欄位:【"+metad.getColumnName(i)+"】,欄位值【"+resultSet.getString(i)+"】\t");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
C. 如何使用junit測試javaweb工程
一:創建一個測試類,建議將測試類單獨放在一個包中(在 maven 項目里有測試類專門的存放位置),新建一個Junit Test Case類,下一步
測試類的命名建議是你將要測試的類名+Test,然後點 Browse, 你可以選擇要進行測試的類(一般選擇 Service, 因為 Service 關心的是業務需求),用這種方式創建可以自動生成要測試類的測試類,你只需要進行測試代碼的書寫.
@Test
public void testqueryById(){
} @Test
public void testQueryAll(){
} @Test
public void testReceNumber(){
}123456789101112
如果裡面有自動生成的代碼,刪除或注釋即可…
二:配置 spring 和 junit 整合, junit 啟動時載入 springIOC 容器,這里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunner.class) //告訴junitspring配置文件
@ContextConfiguration(locations = {"classpath:spring/spring-.xml"})123
同樣的,在測試類中我們會調用 Service 的邏輯,由於我們使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一個 IService 介面(這里我直接對 DAO 進行測試了)
@Autowired
private SeckillDao seckillDao;12
接下來是測試邏輯,在編寫測試代碼之前建議覆蓋實體中的 toString 方法,不然列印會很麻煩.
@Test public void testqueryById(){ long id = 1000;
Seckill seckill = seckillDao.queryById(id);
System.out.println(seckill.getSeckillName());
System.out.println(seckill);
} //JAVA沒有保存形參的記錄,如果你在 中傳了多個參數,那麼需要聲明它的形參對應的實參,否則 JVM 會顯示找不到參數.聲明方式稍後奉上
@Test public void testQueryAll(){
List<Seckill> seckills = seckillDao.queryAll(0, 100); for(Seckill seckill:seckills){
System.out.println(seckill);
}
}
@Test public void testReceNumber(){
Date killTime = new Date(); //對增加進行測試的時候,只要資料庫增加了一條數據,我們就默認這個方法執行成功了
int updateCount = seckillDao.receNumber(1000L, killTime);
System.out.println("updateCount = "+updateCount);
}
解決JAVA不保存形參的記錄
int receNumber(@Param("seckillId")long seckillId,@Param("killTime")Date killTime);
Seckill queryById(long seckillId); /**
* mysql的分頁查詢
* @param offset 告訴它實際的形參
* @param limit
* @return
*/
List<Seckill> queryAll(@Param("offset")int offset,@Param("limit")int limit);1234567891011
接下來我們根據他返回的結果和我們想要的結果對應就可以了. 測試類不用部署項目, 測試周期非常短, 而且可以進行專項測試. 測試類代碼邏輯十分簡單, 幾乎不會出錯. 如果結果不是預期的, 那麼根據你的需求修改!
當然, 它的局限性也很打. 從單元測試不能看出頁面傳值的錯誤, 許多項目在伺服器中的表現也不能模擬.
那麼我們什麼時候用junit呢?
當你的資料庫操作非常復雜, 你不確定能輸出你想要的值的時候, 相比用 debug 調試, 使用 Junit 是更方便的手段.或者新手出錯概率非常大, 也不用在伺服器中專門測試項目的表現, Junit 是個必備的工具!而且測試類的測試代碼重用性很高.
如果你的數據和預期相悖, 那麼修改業務邏輯; 否則, 查看頁面是否有錯! Junit在一定程度上減輕了我們業務代碼調試的壓力, 讓我們關注於一點解決錯誤.
D. junit如何測試訪問資料庫的類
關於junit單元測試工具的安裝請參看第二課的內容(其實就是導入一個junit的jar包就行了)
首先認識幾個註解標簽
@Test:測試方法
@Before:初始化方法
@After:釋放資源
執行順序:@Before->@Test->@After
第一步新建測試文件夾(目的就是用來存放測試類,使項目更整潔,分類明確,好管理)
選中項目右鍵new->Source Folder 輸入文件夾的名稱例如test
在測試文件夾下創建測試類(就是創建個普通的類)
如下在測試類中使用junit進行單元測試
下面只是先搭建一個測試框架
搭建好之後測試hibernate訪問資料庫的代碼注意:導入的包不要弄錯,都是hibernate的包
public class StudentTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init(){ //創建配置對象 Configuration config = new Configuration(); //創建服務注冊對象 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); //創建會話工廠對象 sessionFactory = config.buildSessionFactory(serviceRegistry); //會話對象 session = sessionFactory.openSession(); //開啟事務 transaction = session.beginTransaction(); } @Test public void testSaveStudents(){ Student s = new Student(1, "小明", new Date(), "北京xxxx街道5號樓201"); session.save(s);//保存對象到資料庫 } @After public void destory(){ transaction.commit();//提交事務 session.close();//關閉會話 sessionFactory.close();//關閉會話工廠 }}
進行測試如下: 選中測試方法右鍵run as ->junit test就行了
執行成功控制台列印信息:
查看資料庫表
可以看到增加了一條信息,測試成功