㈠ 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());
}
㈡ 如何使用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在一定程度上減輕了我們業務代碼調試的壓力, 讓我們關注於一點解決錯誤.
㈢ java中框架Junit應該怎麼使用
java中Junit應用介紹:
assert exp1;//exp1 為boolean類型的值
assert exp1:message;//message 為如果exp1不是true的時候,要提示的錯誤消息
斷言一般作用:代碼運行前寫斷言判斷必須滿足的條件;代碼運行後判斷必須符合的標准;確定代碼運行過程中有無改變某些不應該變的東西
2.junit中的Assert類提供了很多方法,替代斷言,參照api:http://www.udel.e/CIS/software/dist/junit4.1/javadoc/org/junit/Assert.html
assertEquals、assertFalse、assertTrue、assertNotNull、assertNull、assertSame、fail
3.註解
@interface用來定義註解
@Retention用來聲明註解的保留策略,有CLASS(註解保存在class文件中)、RUNTIME(運行時可用)和SOURCE(僅在源代碼中)這三種
@Target用來聲明註解可以被添加在哪些類型的元素上:註解、類、方法、方法參數、構造、欄位、方法中的普通變數
定義一個能在方法上使用的註解:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface KennethTest {}
寫一個測試類
public class Test {
@KennethTest public void test1(){System.out.println("test1");}
public void test2(){System.out.println("test2");}
@KennethTest public void test3(){System.out.println("test3");}
}
執行一個類中所有標記KennethTest的方法
public class Main {
public static void main(String[] args) throws Exception{//反射
Class classObj=Test.class;//獲取Test的類對象
Object obj=classObj.newInstance();//調用無參數構造,新建一個Test的對象
Method[] methods=classObj.getMethods();//獲取Test類中所有public方法
for(Method method:methods){
if(method.getAnnotation(KennethTest.class)!=null){//看這個方法是否有KennethTest註解
method.invoke(obj);//如果這個方法有KennethTest註解,那麼這個方法被調用執行
}
}
}
}
4.junit中的註解
@Test @Test(expected=IndexOutOfBoundsException.class) 測試方法拋出這個異常就能通過測試 @Test(timeout=10) 測試方法不能超過10毫秒
@Ignore 忽略測試
@Before 每個測試方法之前執行
@After 每個測試方法之後執行
@BeforeClass 在載入類時執行
@AfterClass 在所有測試方法執行結束,如果有after的話,所有after也執行結束後執行
5.通常寫測試代碼的規則:
1)產品源代碼和測試源代碼要分開,包名類名一致 例如 org.ken.PersonDao 對應測試代碼可以為 test.org.ken.PersonDaoTest
2)一個有功能類要寫至少一個測試類
3)一個方法代表一個用例 用例之間要保持獨立(最好不要互相調用)
㈣ 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就行了
執行成功控制台列印信息:
查看資料庫表
可以看到增加了一條信息,測試成功
㈤ 我用Junit 寫了一個MySQL資料庫連接的測試類,為什麼會報錯
你的jdbc.properties應該是放在classpath下的,應該這樣載入:
JunitTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
如果你的jdbc.properties跟JunitTest放在一個文件夾下(包),可以用:
JunitTest.class.getResourceAsStream("jdbc.properties");
你應該知道二者的區別了吧:
Class.getResourceAsStream("") 會指定要載入的資源路徑與當前類所在包的路徑一致。
ClassLoader.getResourceAsStream("") 無論要查找的資源前面是否帶'/' 都會從classpath的根路徑下查找。