3. springboot中常用的测试方法

一、常用的测试注解

  1. @DisplayName(“测试displayName注解”) 注明要测试的方法名
	@DisplayName("测试displayName注解")
    @Test
    void testDisplayName(){
        System.out.println(1);
        System.out.println(jdbcTemplate);
    }
  1. @Disabled 标注过期的测试
	@Disabled
    @DisplayName("测试displayName注解2")
    @Test
    void testDisplayName2(){
        System.out.println(2);
    }
  1. @Timeout(value = 5,unit = TimeUnit.MILLISECONDS)
	@Timeout(value = 5,unit = TimeUnit.MILLISECONDS)
    @Test
    void testTimeout() throws InterruptedException {
        Thread.sleep(5);
    }
  1. @BeforeEach 在所有测试方法开始前执行
	@BeforeEach
    void testBeforeEach(){
        System.out.println("测试开始");
    }
  1. @AfterEach 在所有测试方法执行完之后执行
	@AfterEach
    void testAfterEach(){
        System.out.println("测试结束");
    }
  1. @BeforeAll 属于测试类的方法只执行一次在一开始就执行
	@BeforeAll
    static void testBeforeAll(){
        System.out.println("所有测试开始");
    }
  1. @AfterAll 属于测试类的方法在所有测试执行完之后执行
	@AfterAll
    static void testAfterAll(){
        System.out.println("所有测试结束");
    }
  1. @RepeatedTest(5) 设置测试次数
	@RepeatedTest(5)
    @Test
    void test3(){
        System.out.println(5);
    }

二、断言

  1. 定义一个类中的方法
	int cal(int i, int j) {
        return i + j;
    }
  1. 测试简单断言
	/**
     * 前面断言失败,后面断言不会执行
     */
    @DisplayName("测试简单断言")
    @Test
    void testSimpleAssertion(){
        int cal = cal(2, 3);
        assertEquals(5, cal, "业务逻辑计算失败");
        String s1 = " a";
        String s2 = " b";
        String s3 = " a" + " b";
        assertSame((s1 + s2), s3, "不是同一个对象");
    }
  1. assertArrayEquals 比较两个对象的内容是否一致
	@DisplayName("array assertion")
    @Test
    void array(){
        assertArrayEquals(new int[]{1,1},new int[]{1,2},"测试内容不相等");
    }
  1. 组合断言
	@DisplayName("组合断言")
    @Test
    void all(){
        /**
         * 所有断言需要全部成功
         */
        assertAll("test",
                () -> assertTrue(true && true,"结果不为true"),
                () -> assertEquals(2,1,"结果不是预期的"));
    }
  1. 异常断言
	@DisplayName("异常断言")
    @Test
    void testException(){
        /**
         * 断定业务逻辑一定会出现异常
         */
        assertThrows(ArithmeticException.class,() -> {
             int i = 10 / 1;
        },"业务逻辑不应该正常运行");
    }
  1. 快速失败
	@DisplayName("快速失败")
    @Test
    void testFail(){
        fail("测试失败");
    }
  1. 前置条件
	/**
     * 测试前置条件
     */
    @DisplayName("测试前置条件")
    @Test
    void testassumptions(){
        Assumptions.assumeTrue(false,"结果不为true");
        System.out.println(111);
    }

三、嵌套测试

@DisplayName("嵌套测试")
public class TestingAStackDemo {
    Stack<Object> stack;

    /**
     * 外层测试不能访问内层测试的beforeEach
     */
    @Test
    @DisplayName("is instantiated with new Stack()")
    void isInstantiatedWithNew() {
        new Stack<>();
    }

    @Nested
    @DisplayName("when new")
    class WhenNew {

        @BeforeEach
        void createNewStack() {
            stack = new Stack<>();
        }

        @Test
        @DisplayName("is empty")
        void isEmpty() {
            assertTrue(stack.isEmpty());
        }

        @Test
        @DisplayName("throws EmptyStackException when popped")
        void throwsExceptionWhenPopped() {
            assertThrows(EmptyStackException.class, stack::pop);
        }

        @Test
        @DisplayName("throws EmptyStackException when peeked")
        void throwsExceptionWhenPeeked() {
            assertThrows(EmptyStackException.class, stack::peek);
        }

        @Nested
        @DisplayName("after pushing an element")
        class AfterPushing {

            String anElement = "an element";

            @BeforeEach
            void pushAnElement() {
                stack.push(anElement);
            }

            /**
             * 内层的test可以驱动外层的beforeEach
             */
            @Test
            @DisplayName("it is no longer empty")
            void isNotEmpty() {
                assertFalse(stack.isEmpty());
            }

            @Test
            @DisplayName("returns the element when popped and is empty")
            void returnElementWhenPopped() {
                assertEquals(anElement, stack.pop());
                assertTrue(stack.isEmpty());
            }

            @Test
            @DisplayName("returns the element when peeked but remains not empty")
            void returnElementWhenPeeked() {
                assertEquals(anElement, stack.peek());
                assertFalse(stack.isEmpty());
            }
        }
    }
}

五、参数化测试

	@DisplayName("参数化测试")
    @ParameterizedTest
    @ValueSource(ints = {1,2,3,4,5})
    void testParameterized(int i) {
        System.out.println(i);
    }

    @DisplayName("参数化测试")
    @ParameterizedTest
    @MethodSource("stringProvider")
    void testParameterized1(String i) {
        System.out.println(i);
    }

    static Stream<String> stringProvider(){
        return Stream.of("apple", "banana");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CAFEBABE 34

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值