Junit5断言机制

API简介

  • assertTrue/False([String message,]boolean condition);
    判断一个条件是true还是false。感觉这个最好用了,不用记下来那么多的方法名。
  • assertTrue(boolean condition);
    condition:如果condition结果为true,则通过测试.
  • assertFalse(boolean condition);
    condition:如果condition结果为false,则通过测试.
  • fail([String message,]);
    失败,可以有消息,也可以没有消息。
  • ssertEquals([String message,]Object expected,Object actual);
    判断是否相等,可以指定输出错误信息。
    第一个参数是期望值,第二个参数是实际的值。
    这个方法对各个变量有多种实现。在JDK1.5中基本一样。
    但是需要主意的是float和double最后面多一个delta的值。
  • assertNotEquals([String message,]Object expected,Object actual);
    判断是否不相等。
    第一个参数是期望值,第二个参数是实际的值。
  • assertArrayEquals([java.lang.String message,] java.lang.Object[] expecteds, java.lang.Object[] actuals) ;
  • assertNotNull/Null([String message,]Object obj);
    判读一个对象是否非空(非空)。
  • assertSame/NotSame([String message,]Object expected,Object actual);
    判断两个对象是否指向同一个对象。看内存地址。
  • failNotSame/failNotEquals(String message, Object expected, Object actual)
    当不指向同一个内存地址或者不相等的时候,输出错误信息。
    注意信息是必须的,而且这个输出是格式化过的。

示例

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTimeout;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.verify;


public class Junit5AssertTest {

    /**
     * assertEquals比较两个值是否相同
     */
    @Test
    void fun1(){
        assertEquals(2, 2);
        //当不相等时,会打印出第三个参数
        assertEquals(4, 5, "不相等");
    }
    /**
     * assertTrue 判断括号里面的参数是否为true
     */
    @Test
    void fun2(){
        assertTrue('a' < 'b', "错误");
    }

    //定义一个person对象,Person类里面有两个参数lastName,firstName
    private static Dept dept = new Dept("RESEARCH","NewYork");


    /**
     * assertAll()方法用于将多个测试语句放在一个组中执行,组中若有一个测试语句不通过,则这个组将会一起报错
     * 方法中第一个参数:组名称
     * 方法中第二个参数:组测试语句
     */
    @Test
    void groupedAssertions() {
        assertAll("dept",
                () -> assertEquals("RESEARCH", dept.getDname()),
                () -> assertEquals("NEWYORK", dept.getLoc())
        );
    }

    /**
     * assertAll()方法也可以嵌套多个assertAll()方法
     * 其中嵌套的多个测试组,这些组只会打印出这个组和父组的错误,对其他的组没有影响
     */
    @Test
    void dependentAssertions() {
        assertAll("properties",
                //第一个测试组
                () -> {
                    String dname = dept.getDname();
                    assertNotNull(dname);
                    assertAll("dname",
                            () -> assertTrue(dname.startsWith("R")),
                            () -> assertTrue(dname.endsWith("H"))
                    );
                },
                //第二个测试组
                () -> {
                    String loc = dept.getLoc();
                    assertNotNull(loc);
                    assertAll("loc",
                            () -> assertTrue(loc.startsWith("N")),
                            () -> assertTrue(loc.endsWith("k"))
                    );
                }
        );
    }

    /**
     * assertThrows()可以用来判断lambda表达式中的代码抛出的异常
     * 比如下面案例就是测试了抛出异常的信息是否相同
     * 参数:
     * 1:异常类声明
     * 2:测试代码Lambda表达式
     */
    @Test
    void exceptionTesting() {
        Throwable exception = assertThrows(IllegalArgumentException.class, () -> {
            try {
                System.out.println(1 / 0);
            }catch (Exception e){
                throw new IllegalArgumentException("非法的参数异常");
            }
        });
        assertEquals("非法的参数异常", exception.getMessage());
    }

    /**
     * assertTimeout()对方法执行时间进行测试
     * 实例中执行的代码部分必须在2分钟之内执行完毕,否则测试不通过
     */
    @Test
    void timeoutNotExceeded() {
        assertTimeout(Duration.ofMinutes(2), () -> {
            System.out.println(33+44);
        });
    }

    /**
     * assertTimeout()还可以接受一个返回值(泛型 T)
     * 被测试代码如果通过测试就返回一个值,这个值被assertTimeout()方法返回
     */
    @Test
    void timeoutNotExceededWithResult() {
        String actualResult = assertTimeout(Duration.ofMinutes(2), () -> {
            return "haha";
        });
        assertEquals("haha", actualResult);
    }

    /**
     * assertTimeout()毫秒案例
     */
    @Test
    void timeoutExceeded() {
        assertTimeout(Duration.ofMillis(10), () -> {
            Thread.sleep(100);
        });
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梁云亮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值