homepage 第四期:微服务功能实现及相关测试

本贴最后更新于 2051 天前,其中的信息可能已经时移世易

1.建立 courseInfo 服务接口

package cn.chenforcode.homepage.service; import cn.chenforcode.homepage.CourseInfo; import cn.chenforcode.homepage.CourseInfosRequest; import java.util.List; public interface ICourseService { /** * @Author <a href="http://www.chenforcode.cn">PKUCoder</a> * @Date 2019/11/11 7:27 下午 * @Param [id] * @Return cn.chenforcode.homepage.CourseInfo * @Description 根据id获取一个courseInfo **/ CourseInfo getCourseInfo(Long id); /** * @Author <a href="http://www.chenforcode.cn">PKUCoder</a> * @Date 2019/11/11 7:27 下午 * @Param [courseInfosRequest] * @Return java.util.List<cn.chenforcode.homepage.CourseInfo> * @Description 根据一个courseInfoRequest对象得到一个courseInfo的list **/ List<CourseInfo> getCourseInfos(CourseInfosRequest courseInfosRequest); }

2.完成对应的实现类

package cn.chenforcode.homepage.service.impl; import cn.chenforcode.homepage.CourseInfo; import cn.chenforcode.homepage.CourseInfosRequest; import cn.chenforcode.homepage.entity.HomepageCourse; import cn.chenforcode.homepage.repository.HomepageCourseRepository; import cn.chenforcode.homepage.service.ICourseService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; /** * @author <a href="http://www.chenforcode.cn">PKUCoder</a> * @date 2019/11/11 7:28 下午 * @description ICourseService接口实现类 */ @Slf4j @Service public class CourseServiceImpl implements ICourseService { @Autowired private HomepageCourseRepository homepageCourseRepository; @Override public CourseInfo getCourseInfo(Long id) { Optional<HomepageCourse> course = homepageCourseRepository.findById(id); //这句话的意思是传入一个homepageCourse对象,然后构造出来一个courseInfo并返回。如果course对象是空的就用invalid //方法的到的一个无效对象进行代替 return buildCourseInfo(course.orElse(HomepageCourse.invalid())); } @Override public List<CourseInfo> getCourseInfos(CourseInfosRequest courseInfosRequest) { //如果request里边的id列表是空的,那么就返回一个空的列表 if (CollectionUtils.isEmpty(courseInfosRequest.getIds())) { return Collections.emptyList(); } //否则就进行查询 List<HomepageCourse> courses = homepageCourseRepository.findAllById(courseInfosRequest.getIds()); return courses.stream() .map(this::buildCourseInfo) .collect(Collectors.toList()); } /** * @Author <a href="http://www.chenforcode.cn">PKUCoder</a> * @Date 2019/11/11 7:46 下午 * @Param [course] * @Return cn.chenforcode.homepage.CourseInfo * @Description 根据传入的一个course构造出来一个courseInfo **/ private CourseInfo buildCourseInfo(HomepageCourse course) { return CourseInfo.builder() .id(course.getId()) .courseName(course.getCourseName()) .courseType(course.getCourseType() == 0 ? "免费课程":"收费课程") .courseIcon(course.getCourseIcon()) .courseIntro(course.getCourseIntro()) .build(); } }

3.完成 controller

package cn.chenforcode.homepage.controller; import cn.chenforcode.homepage.CourseInfo; import cn.chenforcode.homepage.CourseInfosRequest; import cn.chenforcode.homepage.service.ICourseService; import com.alibaba.fastjson.JSON; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * @author <a href="http://www.chenforcode.cn">PKUCoder</a> * @date 2019/11/11 7:48 下午 * @description 课程对外服务接口 */ @Slf4j @RestController public class HomepageCourseController { @Autowired private ICourseService courseService; @GetMapping("/get/course") public CourseInfo getCourseInfo(Long id) { log.info("<homepage-course>: get course -> {}", id); return courseService.getCourseInfo(id); } @PostMapping("/get/courses") public List<CourseInfo> getCourseInfos(@RequestBody CourseInfosRequest request) { log.info("<homepage-course>: get courses -> {}", JSON.toJSONString(request)); return courseService.getCourseInfos(request); } }

4.对 service 进行测试,首先建立测试环境
@1 在 test 目录下建立 resources 目录,并标记为 test resources root,将 main 目录下的配置文件拷贝进来
@2 建立 Application 启动类

package cn.chenforcode.homepage; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author <a href="http://www.chenforcode.cn">PKUCoder</a> * @date 2019/11/11 8:00 下午 * @description 测试用例启动类 */ @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

@3.编写测试

package cn.chenforcode.homepage.service; import cn.chenforcode.homepage.Application; import cn.chenforcode.homepage.CourseInfosRequest; import cn.chenforcode.homepage.entity.HomepageCourse; import cn.chenforcode.homepage.repository.HomepageCourseRepository; import com.alibaba.fastjson.JSON; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.Arrays; /** * @author <a href="http://www.chenforcode.cn">PKUCoder</a> * @date 2019/11/11 9:13 下午 * @description homepageCourseService的测试类 */ @SpringBootTest(classes = {Application.class}, webEnvironment = SpringBootTest.WebEnvironment.NONE) @RunWith(SpringRunner.class) public class HomepageCourseServiceTest { @Autowired private HomepageCourseRepository courseRepository; @Autowired private ICourseService courseService; // @Test public void testCreateCourseInfo() { HomepageCourse course1 = new HomepageCourse( "JDK11&12 新特性解读", 0, "http://www.chenforcode.cn", "解读JDK11&12的新特性"); HomepageCourse course2 = new HomepageCourse( "基于SpringCloud的广告系统的实现", 1, "http://www.chenforcode.cn", "基于SpringCloud微服务架构的广告系统的实现"); System.out.println(courseRepository.saveAll(Arrays.asList(course1, course2)).size()); } @Test public void testGetCourseInfo() { System.out.println(JSON.toJSONString( courseService.getCourseInfo(6L) )); System.out.println(JSON.toJSONString( courseService.getCourseInfo(8L) )); } @Test public void testGetCourseInfos() { System.out.println(JSON.toJSONString( courseService.getCourseInfos( new CourseInfosRequest(Arrays.asList(8L, 9L)) ) )); } }
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3201 引用 • 8216 回帖 • 4 关注
  • 云计算
    79 引用 • 91 回帖 • 1 关注
  • homepage系列
    7 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 628 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 6 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 2 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 664 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    947 引用 • 1460 回帖 • 1 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 567 关注
  • danl
    173 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 175 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    413 引用 • 3589 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    85 引用 • 324 回帖 • 2 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 27 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 368 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 735 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 229 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 271 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 607 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 37 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 597 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 5 关注
  • 倾城之链
    23 引用 • 66 回帖 • 168 关注
  • 浅吟主题

    Jeffrey Chen 制作的思源笔记主题,项目仓库:https://github.com/TCOTC/Whisper

    1 引用 • 28 回帖 • 3 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 313 关注
  • Office

    Office 现已更名为 Microsoft 365. Microsoft 365 将高级 Office 应用(如 Word、Excel 和 PowerPoint)与 1 TB 的 OneDrive 云存储空间、高级安全性等结合在一起,可帮助你在任何设备上完成操作。

    5 引用 • 34 回帖
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖