[Java-基础]单元测试Junit

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java-基础]单元测试Junit相关的知识,希望对你有一定的参考价值。

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

其他都在文中指出

以上是关于[Java-基础]单元测试Junit的主要内容,如果未能解决你的问题,请参考以下文章

JUNIT,HAMCREST,ECLEMMA单元测试基础(JAVA)

大数据必学Java基础(八十三):Junit单元测试

Junit,hamcrest,eclemma单元测试基础(java)

[Java-基础]单元测试Junit

JUnit单元测试基础要点

JAVA基础加强笔记