前面课程 将web开发的相关技术全部讲解完毕,项目功能全部完善
本章将对项目进行收尾,收尾体现在两个方面:
1.项目上线前后要做什么事情:上线之前如何做单元测试;上线时候如何部署;上线以后如何对项目进行有效监控
2.对整个课程进行总结、概况,
3.讲解面试题和技巧
不仅要在 上线之前做单元测试,在开发过程中,每个功能开发完都要做,单元测试贯穿于整个开发过程中
在SpringBootTests类中:
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class SpringBootTests {
@Autowired
private DiscussPostService discussPostService;
private DiscussPost data;
//调用一个测试方法,这俩方法只执行一次
@BeforeClass
public static void beforeClass() {
System.out.println("beforeClass");
}
@AfterClass
public static void afterClass() {
System.out.println("afterClass");
}
//每调用一个测试方法,前后各执行一次
@Before
public void before() {
System.out.println("before");
// 初始化测试数据
data = new DiscussPost();
data.setUserId(111);
data.setTitle("Test Title");
data.setContent("Test Content");
data.setCreateTime(new Date());
discussPostService.addDiscussPost(data);
}
@After
public void after() {
System.out.println("after");
// 删除测试数据
discussPostService.updateStatus(data.getId(), 2);
}
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
执行test1,结果:
beforeClass和afterClass 是在程序 初始化过程中执行的
before 和 afte 是在方法之前之后调用的
执行总的方法
两个测试方法都被执行:
充分说明了 程序 初始化过程中,beforeClass和afterClass 只在类加载和销毁之间 执行一次
接下来测试帖子的services,先注入
@Autowired
private DiscussPostService discussPostService;
private DiscussPost data;
希望在调用每个方法之前,都初始化一个新数据。调用每个方法之后,也初始化一个新数据。
因此在before里初始化比较合适
private DiscussPost data;//声明成员变量
//每调用一个测试方法,前后各执行一次。每运行一个测试方法,都要执行一遍。
@Before
public void before() {
System.out.println("before");
// 初始化测试数据,实例化一个DiscussPost,然后将其插入到表中
data = new DiscussPost();
data.setUserId(111);
data.setTitle("Test Title");
data.setContent("Test Content");
data.setCreateTime(new Date());
discussPostService.addDiscussPost(data);
}
因此,每个测试方法依赖于独一份的数据,执行after后删除数据
@After
public void after() {
System.out.println("after");
// 删除测试数据,把data的状态设置为2
discussPostService.updateStatus(data.getId(), 2);
}
开始测试:
@Test
public void testFindById() {//测试查询方法
DiscussPost post = discussPostService.findDiscussPostById(data.getId());
//通过断言,判断结果对不对(即当前条件成立与否),不成立则显示异常
Assert.assertNotNull(post);
Assert.assertEquals(data.getTitle(), post.getTitle());
Assert.assertEquals(data.getContent(), post.getContent());
}
对整个类进行测试
测试testFindById、testUpdateScore时,均各生成了一个新的data(虽然变量名字都一样,但内部数据是不同的)