【JFinal】 单元测试问题

00oo 发布于 2014/07/01 10:46
阅读 2K+
收藏 0

采用JFinal1.8  + JFinal-ext-3.1.0

准备建立单元测试,看了jfinal-ext-3.1.0的demo

public class PostTestCase extends ControllerTestCase<Config> {

    @Test
    public void line() throws Exception {
        String url = "/post";
        String filePath = Thread.currentThread().getContextClassLoader().getResource("dataReq.xml").getFile();
        String fileResp = "/home/kid/git/jfinal-ext/resource/dataResp.xml";
        String resp = use(url).post(new File(filePath)).writeTo(new File(fileResp)).invoke();
        System.out.println(resp);
    }

    @Test
    public void test3() {
        String url = "/post/1?age=1&age=2&name=2";
        String body = "<root>中文</root>";
        use(url).post(body).invoke();
    }
}

这里的Config如何定义,如何初始化?

还有一种:

public class TestRoute extends ControllerTestCase {
	@BeforeClass
	public static void init() throws Exception{
		start(new Config());
	}
	@Test
	public void testAController() throws Exception {
		invoke("/aa");
		assertEquals("zhoulei", findAttrAfterInvoke("name"));
		assertEquals(24, findAttrAfterInvoke("age"));
	}
	@Test
	public void testBController() throws Exception {
		invoke("/bb");
		assertEquals("zhoulei", findAttrAfterInvoke("name"));
		assertEquals(24, findAttrAfterInvoke("age"));
	}


}



如果采用这种方式,new config()方法会报错,这里采用自己项目定义的继承JFinalConfig的config类。

请教两位@JFinal  @绝望的八皮,如何解决?



以下是问题补充:

@00oo:根据 @JFinal 波总的回答,普通类可以采用自己初始化ActiveRecordPlugin 来进行单元测试,但是如何像 @绝望的八皮 所写的扩展类中,可以直接对Controller 进行测试呢,他在 ControllerTestCase 类中封装了invoke,post等方法。只有自己去写了么? (2014/07/01 16:39)
加载中
0
JFinal
JFinal
    jfinal ext 项目有测试用的例子,或许 jfinal ext 还没有将 jfinal 升级到 1.8 版本,但就测试来说问题不大,或许只需要楼主手动初始化 jfinal ActiveRecrodPlugin 即可,参照 jfinal 1.8 手册中的例子 new 一个 ActiveRecordPlugin 对象来,然后手动 arp.start(),再继续测试工作
00oo
00oo
好的,多谢指点!我就先这么做!
0
00oo
00oo

引用来自“JFinal”的评论

    jfinal ext 项目有测试用的例子,或许 jfinal ext 还没有将 jfinal 升级到 1.8 版本,但就测试来说问题不大,或许只需要楼主手动初始化 jfinal ActiveRecrodPlugin 即可,参照 jfinal 1.8 手册中的例子 new 一个 ActiveRecordPlugin 对象来,然后手动 arp.start(),再继续测试工作
DruidPlugin dp = new DruidPlugin(
			"jdbc:mysql://localhost/XXXX?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull", 
			"admin", 
			"XXXX");
		arp = new ActiveRecordPlugin(dp);
		arp.addMapping("user", User.class);
		arp.start();

不好意思,再追问下,我在初始化Junit的时候这么做的,为什么报错?

java.lang.RuntimeException: ActiveRecord start error: ActiveRecordPlugin need DataSource or DataSourceProvider

@JFinal



0
JFinal
JFinal

引用来自“JFinal”的评论

    jfinal ext 项目有测试用的例子,或许 jfinal ext 还没有将 jfinal 升级到 1.8 版本,但就测试来说问题不大,或许只需要楼主手动初始化 jfinal ActiveRecrodPlugin 即可,参照 jfinal 1.8 手册中的例子 new 一个 ActiveRecordPlugin 对象来,然后手动 arp.start(),再继续测试工作

引用来自“00oo”的评论

DruidPlugin dp = new DruidPlugin(
			"jdbc:mysql://localhost/XXXX?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull", 
			"admin", 
			"XXXX");
		arp = new ActiveRecordPlugin(dp);
		arp.addMapping("user", User.class);
		arp.start();

不好意思,再追问下,我在初始化Junit的时候这么做的,为什么报错?

java.lang.RuntimeException: ActiveRecord start error: ActiveRecordPlugin need DataSource or DataSourceProvider

@JFinal



DruidPlugin 也需要先调用 dp.start() 方法,它也是可以独立于 jfinal 运行的插件
00oo
00oo
嗯,懂了!新手上路,多谢你的耐心指点!
返回顶部
顶部