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