zoukankan      html  css  js  c++  java
  • [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

    其他都在文中指出

  • 相关阅读:
    [译]HTML&CSS Lesson5: 定位
    Emscripten教程之入门指导
    html简单响应式滚动条置顶
    移动web开发问题和优化小结
    React+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
    ECMAScript中有两种属性:数据属性和访问器属性。
    css写作建议和性能优化小结
    validator API文档
    HBase概念学习(九)HTablePool为何弃用?
    leetcode -day 15 Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/smallocean/p/12381057.html
Copyright © 2011-2022 走看看