场景
-
开发JavaWeb 网站时,无论是否使用框架,都需要进行单元测试。比如对数据库查询的接口进行单元测试,直接查询和更新,避免了从浏览器进入的一系列鼠标点击操作,节约了测试时间。 -
这里使用了常见的国内中小型框架Jfinal 来开发网站,那么如何对这个框架的BlogService 进行单元测试?
说明
-
Java 使用JUnit 进行常规的单元测试。这里使用项目4.9.15_demo_for_maven [3]作为测试源码. 关于导入4.9.15_demo_for_maven 可以参考搭建jfinal_4.9.15_demo_for_maven开发环境 [5]。 -
修改pom.xml 文件,把JUnit 的依赖从改为4.x 版本的, 原项目的3.x 太古老了。之后选中pom.xml ,右键Maven ->Reload Project , 注意这里使用IntelliJ IDEA 作为开发工具。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
-
之后在项目的src ->test 里建com.demo.blog.test.TestBlogService 类,对应测试BlogService 接口. 接着就是参考独立使用 ActiveRecord [1]创建独立的DruidPlugin 和ActiveRecordPlugin 插件,在启动测试之前加载并启动。 @Before
public void onSetUp(){
dp = new DruidPlugin("jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull", "root", "");
arp = new ActiveRecordPlugin(dp);
arp.setShowSql(true);
arp.addMapping("blog", Blog.class);
dp.start();
arp.start();
service = Aop.get(BlogService.class);
log.setLevel(Level.INFO);
}
-
接着就是编写单元测试的方法, 这里测试了分页方法。测试时,选中方法左边的绿色三角右键-〉Debug testPaginate @Test
public void testPaginate(){
Page<Blog> page = service.paginate(1, 10);
for (Blog blog :page.getList()) {
Assert.assertNotNull(blog.getTitle());
Assert.assertNotNull(blog.getContent());
log.info(blog.getTitle()+"=>"+blog.getContent());
}
}
图1:
例子
- 这里是
TestBlogService 的源码.
package com.demo.blog.test;
import com.demo.blog.BlogService;
import com.demo.common.model.Blog;
import com.jfinal.aop.Aop;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.druid.DruidPlugin;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class TestBlogService {
private static Logger log = Logger.getLogger(TestBlogService.class);
DruidPlugin dp;
ActiveRecordPlugin arp;
BlogService service;
@Before
public void onSetUp(){
dp = new DruidPlugin("jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull", "root", "");
arp = new ActiveRecordPlugin(dp);
arp.setShowSql(true);
arp.addMapping("blog", Blog.class);
dp.start();
arp.start();
service = Aop.get(BlogService.class);
log.setLevel(Level.INFO);
}
@After
public void onTearDown(){
arp.stop();
dp.stop();
}
@Test
public void testPaginate(){
Page<Blog> page = service.paginate(1, 10);
for (Blog blog :page.getList()) {
Assert.assertNotNull(blog.getTitle());
Assert.assertNotNull(blog.getContent());
log.info(blog.getTitle()+"=>"+blog.getContent());
}
}
}
输出
2022-04-11 15:52:55
[INFO]-[Thread: main]-[com.demo.blog.test.TestBlogService.testPaginate()]: JFinal Demo Title here=>JFinal Demo Content here
2022-04-11 15:52:55
[INFO]-[Thread: main]-[com.demo.blog.test.TestBlogService.testPaginate()]: test 1=>test 1
...
下载
https://download.csdn.net/download/infoworld/85110637
参考
-
JFinal 文档、资料、学习、API,独立使用 ActiveRecord -
JFinal 文档、资料、学习、API,Maven 基础 -
4.9.15_demo_for_maven -
Apache log4j 1.2 - Short introduction to log4j -
搭建jfinal_4.9.15_demo_for_maven开发环境 -
JUnit4
|