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