单元测试在日常开发工作中是一个非常重要,但又经常被疏忽的地方。也是衡量代码健壮性的一个重要指标。如果在平时开发过程中注重单元测试的编写,那么在后期代码重构,扩展时会大大减小因为变动而造成的bug产生。因此建议大家养成编写单元测试的好习惯。尤其是一些持续迭代的项目。
AssertJ是一款为了提高测试代码的可读性,并简化测试的维护的Java类库。它可以让我们很方便,编写出简洁易懂的单元测试用例。为我们CICD提供帮助。
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<!-- use 2.9.1 for Java 7 projects -->
<version>3.11.1</version>
<scope>test</scope>
</dependency>
testImplementation("org.assertj:assertj-core:3.16.1")
下面主要介绍常用的断言使用。需要特别说明本次说明所运用的版本是3.16.1 jdk版本1.8.
public class BasicTypeTest {
/**
* 判断等值匹配
* */
@Test
public void shouldBeOne() {
int targetValue = 1;
//条件成立
assertThat(targetValue).isEqualTo(1);
//条件不成立
assertThat(targetValue).isEqualTo(2);
}
/**
* 范围匹配
* */
@Test
public void shouldBeGreaterOrLess () {
int targetValue = 5;
// 大于3 条件成立
assertThat(targetValue).isGreaterThan(3);
//大于等于5 条件成立
assertThat(targetValue).isGreaterThanOrEqualTo(5);
//小于6 条件成立
assertThat(targetValue).isLessThan(6);
//小于等于5 条件成立
assertThat(targetValue).isLessThanOrEqualTo(5);
//区间范围 大于等于4 小于等于6
assertThat(targetValue).isBetween(4, 6);
}
/**
* 浮动匹配,接近于某一个区间
* */
@Test
public void shouldBeClose() {
double v = 10/3d;
// v = 3.333333333.... 在 3.32 ~ 3.34 区间。条件成立
assertThat(v).isCloseTo(3.33d, Offset.offset(0.01d));
}
}
public class StringTypeTest {
/**
* 判断字符串长度
* */
@Test
public void shouldHaveSize() {
String targetValue = "Hello World";
//字符串长度11 条件成立
assertThat(targetValue).hasSize(11);
}
/**
* 判断字符串Start or null
* */
@Test
public void shouldStartWith() {
String targetValue = "Hello World";
//以Hello 开头 条件成立
assertThat(targetValue).startsWith("Hello");
//不以World 开头 条件成立
assertThat(targetValue).doesNotStartWith("World");
//不为空 条件成立
assertThat(targetValue).isNotEmpty();
//为空 条件不成立
assertThat(targetValue).isEmpty();
}
/**
* 判断字符串包含
* */
@Test
public void shouldContain() {
String targetValue = "Hello World";
//包含 Wor 字符 条件成立
assertThat(targetValue).contains("Wor");
//忽略大小写包含 l 条件成立
assertThat(targetValue).containsIgnoringCase("L");
//只包含一个 W 条件成立
assertThat(targetValue).containsOnlyOnce("W");
//不包含 R 条件成立
assertThat(targetValue).doesNotContain("R");
}
}
public class CollectionTest {
@Test
public void shouldHaveSize () {
//list size is 7
List<Integer> targetList = Arrays.asList(12, 33, 23,11,24,54,12);
assertThat(targetList).hasSize(7);
}
@Test
public void shouldContainSequence() {
List<Integer> targetList = Arrays.asList(12, 33, 23,11,24,54,12);
//按顺序依次包含元素
assertThat(targetList).containsSequence(12,33,23,11);
//不按顺序包含
assertThat(targetList).contains(54, 23, 33,12);
//指定位置包含指定元素 下标1 对应匹配33 ,下标5对应匹配54
assertThat(targetList).contains(33, Index.atIndex(1)).contains(54,Index.atIndex(5));
//不包含
assertThat(targetList).doesNotContain(100);
//只包含一次指定元素
assertThat(targetList).containsOnlyOnce(33);
//包含一个子序列
assertThat(targetList).containsSubsequence(Arrays.asList(12,33));
//包含全部元素并且顺序一致
assertThat(targetList).containsExactlyElementsOf(Arrays.asList(12, 33, 23,11,24,54,12));
//集合中是否有重复元素 条件不成立 当前list 中有 12 是重复的
assertThat(targetList).doesNotHaveDuplicates();
}
}
以上是我们常用到的一些断言表达式。还有很多,建议参考下面参考资料中的文档。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。