UT (常用注解):
@RunWith(Junit4.class): 不需要依赖spring,可以当做单线程来运行,需要Mock数据
@Before //在方法运行前执行,本例先mock出一个dao
public void setup() {
newsDao = Mockito.mock(INewsDao.class);
newsService = new NewsService(newsDao);
}
@Test(expected = IllegalArgumentException.class)
public void getNewsById_withEmptyId() {
newsService.getNewsById(null);
}
@Test
public void getNewsById_withValidId() {
News n = new News("123");
String id = "123";
given(newsDao.ofId(id)).willReturn(n);
News news = newsService.getNewsById(id);
Assert.assertSame(n, news); //assertSame是全等,assertEquals是值等
}
UT测试范围:主要测试单元内部的数据结构、逻辑控制、异常处理等:
注意:UT没有方法参数和返回值
1.@Test: 测试方法
a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过
2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码
3.@Before: 每一个测试方法之前运行
4.@After: 每一个测试方法之后运行
5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分before,是所有测试方法
6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After
①测试方法上必须使用@Test进行修饰
②测试方法必须使用public void 进行修饰,不能带任何的参数
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
④测试类所在的包名应该和被测试类所在的包名保持一致
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
⑥测试类使用Test作为类名的后缀(不是必须)
⑦测试方法使用test作为方法名的前缀(不是必须)
IT(常用注解):
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
@SqlGroup({
@Sql(
executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
scripts = {"classpath:database/job/schema-h2.sql", "classpath:database/job/data-h2.sql"}),
@Sql(
executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD,
scripts = {"classpath:database/job/cleanup-h2.sql"})
})
因为集成测试不需要mock Dao层,我们需要使用@SqlGroup为我们创造一些假数据,注意一定要删掉,要不然数据库会有脏数据