play框架下的junit

下午看了下play框架下的junit测试,参照文档,写了个测试方法,如下:

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.一下子很迷糊,搞了半天不知道为什么。

请教忠哥,忠哥教我打断点,我打了断点,却还是看不出什么来。最后在忠哥的帮助下顺利解决,解决过程如下:

1、我这里需要获取user,于是将方法中获取user的地方打个断点,然后开启debug模式,F8\F5\F6等操作之后,发现控制台打印出了如下图错误:

 

原来play测试模式和开发模式的一些数据库配置不一样导致的,把测试那些配置给注释掉。就能获取到user了,但是 测试方法中  assertEquals(user.getName(), "ysp");依然不通过,又在忠哥的帮助下,知道了需要在action方法中加入

renderArgs.put("user", user);

其实想想也是的,如果这里不先放进去,在测试方法中怎么能通过 renderArgs("user") 获取得到呢?

2、以前一直不把日志当回事,觉得没多大用处,今天才知道他很重要,不然都不知道哪里出了什么错误

在实现类中加入了 private static Logger LOG = LoggerFactory.getLogger(UserDaoImpl.class);

然后遇到异常,就捕获它 LOG.error(e.getMessage(), e) 打印出来 

posted @ 2015-02-28 15:21  genpys  阅读(417)  评论(0编辑  收藏  举报