Junit是一个用于单元测试的小框架
从@Test
开始
在某个测试程序的方法名上加上注解@Test
,不需要main函数,可以直接点击测试方法上的Run As --->Junit Test,表示运行该测试程序,其它的不运行。
需要注意的是方法权限只能是public,不能用static修饰
如果有多个,点击类旁边的Run即可run多个test方法
基本注解
@BeforeClass
– 表示在类中的任意public static void
方法执行之前执行@AfterClass
– 表示在类中的任意public static void
方法执行之后执行@Before
– 表示在任意使用@Test
注解标注的public void
方法执行之前执行@After
– 表示在任意使用@Test
注解标注的public void
方法执行之后执行
public class BasicAnnotationTest {
// Run once, e.g. Database connection, connection pool
@BeforeClass
public static void runOnceBeforeClass() {
System.out.println("@BeforeClass - runOnceBeforeClass");
}
// Run once, e.g close connection, cleanup
@AfterClass
public static void runOnceAfterClass() {
System.out.println("@AfterClass - runOnceAfterClass");
}
// Should rename to @BeforeTestMethod
// e.g. Creating an similar object and share for all @Test
@Before
public void runBeforeTestMethod() {
System.out.println("@Before - runBeforeTestMethod");
}
// Should rename to @AfterTestMethod
@After
public void runAfterTestMethod() {
System.out.println("@After - runAfterTestMethod");
}
@Test
public void test_method_1() {
System.out.println("@Test - test_method_1");
}
@Test
public void test_method_2() {
System.out.println("@Test - test_method_2");
}
}
输出结果是:
@BeforeClass - runOnceBeforeClass
@Before - runBeforeTestMethod
@Test - test_method_1
@After - runAfterTestMethod
@Before - runBeforeTestMethod
@Test - test_method_2
@After - runAfterTestMethod
@AfterClass - runOnceAfterClass
详细可见:https://blog.csdn.net/zixiao217/article/details/52951679
基本方法
assertTrue()
如果为true,则运行success,反之Failure
没有错误提示,会报错
assertEquals()
有两个参数,我们可以把一个预期结果作为1参传递进去. 2参传递我们需要测试的方法. 然后执行. 相等, 代码继续往下执行, 不相等, 中断执行, 抛出异常信息。
异常信息:
详细可见:https://blog.csdn.net/tgvincent/article/details/81296349
@SpringBootTest
用法
写单元测试的时候肯定要用到main中的类,一个笨办法是直接new一个对象。
但是这样在复杂的项目中是不可取的。
通过SpringBootTest
的注解,它会初始化一个spring的上下文
然后通过@Autowired
注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
@SpringBootTest
public class UserService {
@Autowired
private UserRepository userRepository;//就可以直接这么用
public void save(){
userRepository.save();
}
}
详细可见:https://www.cnblogs.com/fnlingnzb-learner/p/9723834.html
Mock
@RunWith(SpringRunner.class)//启动Spring
@SpringBootTest(classes = Demo04.class)
public class test1 {
@Mock
private Demo04 demo04;
@Test
public void t2(){
when(demo04.Add(1,1)).thenReturn(3);
assertEquals(3,demo04.Add(1,1));
System.out.println("abc");
}
}
结果是通过。
我觉得这篇讲的很好:https://zhuanlan.zhihu.com/p/98074553
常见错误
you need to use @ContextConfiguration or @SpringBootTest(classes=...)
@SpringBootTest
搜索@SpringBootApplication
注解的类,是按照test所在类的package往父层级逐级搜索。 所以解决办法一:@SpringBootTest(classes = Application.class)
,解决方案二:修改test所在类的package,放到@SpringBootApplication
子package
一开始我还真的加了@SpringBootTest(classes = Application.class)
23333
参考
https://www.jianshu.com/p/b50ac44c3444
https://blog.csdn.net/liubenlong007/article/details/85398181
其他都在文中指出