内容简介: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单元测试
- 单元测试 – 我应该对不应该在函数中传递的数据(无效输入)进行单元测试吗?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Trading and Exchanges
Larry Harris / Oxford University Press, USA / 2002-10-24 / USD 95.00
This book is about trading, the people who trade securities and contracts, the marketplaces where they trade, and the rules that govern it. Readers will learn about investors, brokers, dealers, arbit......一起来看看 《Trading and Exchanges》 这本书的介绍吧!