下午看了下play框架下的junit測試,參照文檔,寫了個測試方法,以下:java
public class ApplicationTest extends FunctionalTest { @Test public void testUserIsFoundAndPassedToView() { Response response = GET("/UserControl/selectByName?name=ysp"); assertIsOk(response); User user = (User) renderArgs("user"); System.out.println(user); //輸出user assertEquals(user.getName(), "ysp"); } }
在junit下運行該方法,則會去訪問 UserControl/selectByName?name=ysp 數據庫
其中UserControl 的selectByName方法爲框架
public static void selectByName(String name) { User user = userLogic.getByName(name); // renderArgs.put("user", user); renderJSON(user); }
我想象中是發送一個帶name='ysp'的請求,而後得到一個user,最後調用user.getName()方法,與ysp進行對比,那確定是一致的。可是結果卻沒有經過,最後我把user打印出來,發現user==null.一會兒很迷糊,搞了半天不知道爲何。測試
請教忠哥,忠哥教我打斷點,我打了斷點,卻仍是看不出什麼來。最後在忠哥的幫助下順利解決,解決過程以下:spa
一、我這裏須要獲取user,因而將方法中獲取user的地方打個斷點,而後開啓debug模式,F8\F5\F6等操做以後,發現控制檯打印出了以下圖錯誤:debug
原來play測試模式和開發模式的一些數據庫配置不同致使的,把測試那些配置給註釋掉。就能獲取到user了,可是 測試方法中 assertEquals(user.getName(), "ysp");依然不經過,又在忠哥的幫助下,知道了須要在action方法中加入日誌
renderArgs.put("user", user);code
其實想一想也是的,若是這裏不先放進去,在測試方法中怎麼能經過 renderArgs("user") 獲取獲得呢?blog
二、之前一直不把日誌當回事,以爲沒多大用處,今天才知道他很重要,否則都不知道哪裏出了什麼錯誤開發
在實現類中加入了 private static Logger LOG = LoggerFactory.getLogger(UserDaoImpl.class);
而後遇到異常,就捕獲它 LOG.error(e.getMessage(), e) 打印出來