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) 打印出来 

相关文章
相关标签/搜索