内容简介:Jboot 一个更简单的分布式、微服务框架。 Jboot是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务、分布式开发门槛。爽爽开发,快乐...
Jboot 一个更简单的分布式、微服务框架。
Jboot是一个基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等开发的微服务框架,帮助开发者降低微服务、分布式开发门槛。爽爽开发,快乐生活。
到目前为止,Jboot 已经开源超过了 5 年的时间,迭代了 190+ 个版本,已经被超过 1000+ 公司在使用,其中包含了多个知名的上市公司。
Jboot 在 v3.9.15 版本发布的时候,带来了针对 Junit4 和 junit5 的强大的单元测试能力。
junit4 单元测试代码如下:
@RunWith(JbootRunner.class)
public class MyAppTester {
private static MockMvc mvc = new MockMvc();
@Inject
private MyService myService;
@Test
public void test_url_aaa() {
MockMvcResult mvcResult = mvc.get("/aaa");
mvcResult.printResult()
.assertThat(result -> Assert.assertNotNull(result.getContent()))
.assertTrue(result -> result.getStatus() == 200);
}
@Test
public void test_url_bbb() {
MockMvcResult mvcResult = mvc.get("/bbb");
mvcResult.printResult()
.assertThat(result -> Assert.assertNotNull(result.getContent()))
.assertTrue(result -> result.getStatus() == 200);
}
@Test
public void test_my_service() {
Ret ret = myService.doSomeThing();
Assert.assertNotNull(ret);
//.....
}
}
我们可以通过 MockMvc 可以对 JFinal(Jboot) 中的 Controller、Interceptor、Handler 等进行测试,无需启动 JFinal 服务。同时可以直接通过 @Inject 或者 @RPCInject 把 Service 注入到 MyAppTester 里,直接对 service 进行测试。
在 junit5 中,代码如下:
@ExtendWith(JbootExtension.class)
public class MyAppTester {
private static MockMvc mvc = new MockMvc();
@Inject
private MyService myService;
@Test
public void test_url_aaa() {
MockMvcResult mvcResult = mvc.get("/aaa");
mvcResult.printResult()
.assertThat(result -> Assertions.assertNotNull(result.getContent()))
.assertTrue(result -> result.getStatus() == 200);
}
@Test
public void test_url_bbb() {
MockMvcResult mvcResult = mvc.get("/bbb");
mvcResult.printResult()
.assertThat(result -> Assertions.assertNotNull(result.getContent()))
.assertTrue(result -> result.getStatus() == 200);
}
@Test
public void test_my_service() {
Ret ret = myService.doSomeThing();
Assertions.assertNotNull(ret);
//.....
}
}
Junit4 和 junit5 主要的不同点是 MyApTester 类的注解配置不同而已。Junit4 使用 @RunWith(JbootRunner.class) 配置,而 Junit5 使用 @ExtendWith(JbootExtension.class) 配置。
在 v3.9.15 中,虽然提供了 @RunWith(JbootRunner.class) 和 @ExtendWith(JbootExtension.class),同时 MockMvc 测试类,对 Controller 进行测试。但是还有一些不足的地方,比如 在 Controller 中调用了某个 Service 的方法,而该 Service 可能会依赖很多外部资源,比如 redis 、 mysql 、磁盘文件等等。又或者在多 Maven 模块的情况,我们引用了 Service 接口,却没有引用实现类。此时可能会导致测试异常。
因为 Jboot 在不赖其他任何第三方测试框架上,提供了注解 @MockMethod 对 Service 方法进行 Mock 的能力。例如:
@RunWith(JbootRunner.class)
@TestConfig(autoMockInterface = true)
public class OptionApiControllerTest {
private static final MockMvc mvc = new MockMvc();
@Test
public void query() {
mvc.get("/api/option/query?key=myKey").printResult();
}
@MockMethod(targetClass = JPressCoreInitializer.class)
public void onHandlerConfig(JfinalHandlers handlers) {
handlers.add(new JPressHandler());
}
@MockMethod(targetClass = UtmService.class)
public void doRecord(Utm utm){
System.out.println(">>>>>>>>>doRecord: " + utm);
}
@MockMethod(targetClass = WebInitializer.class,targetMethod = "onEngineConfig")
public void mock_on_engine_config(Engine engine){
System.out.println(">>>>>>>>>onEngineConfig: " + engine);
}
}
在以上的代码中,有几个关键的地方:
@TestConfig(autoMockInterface = true),表示当我们测试query()方法的时候,可能会遇到一些注入进来的接口,但是可能没有实现类(或者说实现类在别的 Maven Module,并没有依赖进来),但是保证不出错。 当调用接口方法时,等同于什么都不做,若有返回值,则返回null。@MockMethod(targetClass = JPressCoreInitializer.class)表示复写JPressCoreInitializer类的onHandlerConfig方法。@MockMethod(targetClass = UtmService.class)表示复写UtmService类的doRecord方法。@MockMethod(targetClass = WebInitializer.class,targetMethod = "onEngineConfig")表示复写WebInitializer类的onEngineConfig方法。
只能说,对于使用 Jboot 的用户真的是太幸福了~~~
Jboot v3.9.18 更新内容如下:
- 新增:新增 @MockMethod 注解,方便对 AOP 方法进行 Mock
- 新增:@TestConfig(autoMockInterface=false) 配置,方便对接口进行 Mock 操作
- 修复:Motan RPC 框架的 protocol 配置不生效的问题
- 修复:ide 配置错误时给出的 JFinal 配置帮助文档网址错误
- 修复:JbootActionReporter 可能出现 NotFoundException 的问题
- 修复:JbootActionReporter 可能出现 NPE 的问题
- 修复:阿里云商业 MQ Aliyunmq 配置错误的问题,感谢 @不器
- 修复:Junit 测试对于个别 ServletRequest 方法没有 mock 到而出错的问题
- 修复:当 Jboot 有上层 session 时(比如使用 shiro),修改 Controller session 无法同步上层 session 的问题
- 文档:修改某些描述错误的文档
Jboot 开发文档:
同时,Jboot 官方也推出了收费的、企业级快速开发框架 JbootAdmin (如下图所示),关于 JbootAdmin 的功能详情或者演示,请咨询海哥。

maven 依赖:
<dependency>
<groupId>io.jboot</groupId>
<artifactId>jboot</artifactId>
<version>3.9.18</version>
</dependency>
Hello World:
@RequestMapping("/")
public class HelloWorld extends JbootController {
public void index(){
renderText("hello world");
}
public static void main(String[] args){
JbootApplication.run(args);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 学习 Node.js,第 9 单元:单元测试
- Vue 应用单元测试的策略与实践 02 - 单元测试基础
- Vue 应用单元测试的策略与实践 04 - Vuex 单元测试
- Vue 应用单元测试的策略与实践 03 - Vue 组件单元测试
- Angular单元测试系列-Component、Directive、Pipe 以及Service单元测试
- 单元测试 – 我应该对不应该在函数中传递的数据(无效输入)进行单元测试吗?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
世界是平的(3.0版)
[美] 托马斯·弗里德曼 / 何帆、肖莹莹、郝正非 / 湖南科学技术出版社 / 2008-9 / 58.00元
世界变得平坦,是不是迫使我们跑得更快才能拥有一席之地? 在《世界是平的》中,托马斯·弗里德曼描述了当代世界发生的重大变化。科技和通信领域如闪电般迅速的进步,使全世界的人们可以空前地彼此接近——在印度和中国创造爆炸式增长的财富;挑战我们中的一些人,比他们更快占领地盘。3.0版新增两章,更新了报告和注释方面的内容,这些内容均采自作者考察世界各地特别是整个美国中心地带的见闻,在美国本土,世界的平坦......一起来看看 《世界是平的(3.0版)》 这本书的介绍吧!
