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
其他都在文中指出
来源:https://www.cnblogs.com/smallocean/p/12381057.html