play框架下的junit

下午看了下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) 打印出來 

相關文章
相關標籤/搜索