推荐使用 Expekt——Kotlin 的 BDD 风格断言库
expektBDD assertion library for Kotlin项目地址:https://gitcode.com/gh_mirrors/ex/expekt
Expekt 是一个仍在开发中的行为驱动开发(BDD)风格的断言库,专为 Kotlin 设计,灵感来源于 JavaScript 的 Chai.js 库。它与你的测试框架如 JUnit 和 Spek 兼容,让你的测试代码更加清晰易读。
class ExpektTest {
@Test
fun helloExpekt() {
23.should.equal(23)
"Kotlin".should.not.contain("Scala")
listOf(1, 2, 3).should.have.size.above(1)
}
}
关注 @winterbe_ 获取最新的更新信息!
开始使用
Expekt 已经在 Maven 中央仓库发布,你可以很容易地在 Maven POM 或 Gradle 构建配置中添加依赖。
Maven
<dependency>
<groupId>com.winterbe</groupId>
<artifactId>expekt</artifactId>
<version>0.5.0</version>
<scope>test</scope>
</dependency>
Gradle
testCompile "com.winterbe:expekt:0.5.0"
简单上手
Expekt 提供了两种风格的断言:should
和 expect
,两者都提供相同的功能。任何对象上都可以直接使用 should
属性,即使对象是 null
。而 expect
函数则接受一个对象作为参数。
如果你使用 IntelliJ IDEA,IDE 将自动为你处理导入。如果你手动管理导入,只需在测试文件中引入以下之一:
import com.winterbe.expekt.expect
import com.winterbe.expekt.should
Expekt API 包含许多可链式调用的方法和属性,比如 to
、be
和 which
,它们用于提高可读性,但没有实际的语义含义。not
属性可以用来否定期望。根据初始值的类型,有许多方法和属性可用于断定值的不同方面,例如检查集合是否包含特定元素,数字是否在范围内,字符串是否匹配指定的正则模式等。
查看 API 文档 获取所有可用的断言方法和属性。
失败时的情况
当预期失败时,Expekt 会抛出一个包含详细错误信息的 java.lang.AssertionError
,使你能迅速定位问题所在。
class FailingTest {
@Test
fun thisTestFails() {
3.4.should.be.closeTo(3.2, delta = 0.1)
}
}
上述测试失败后,会产生以下异常:
java.lang.AssertionError: 3.4 should be closeTo 3.2 ±0.1
at com.winterbe.expekt.ExpectAny.fail(ExpectAny.kt:77)
at com.winterbe.expekt.ExpectAny.verify(ExpectAny.kt:68)
at com.winterbe.expekt.ExpectDouble.closeTo(ExpectDouble.kt:12)
...
示例
以下是使用 should
属性的一些断言示例:
23.should.equal(23)
null.should.be.`null`
"foo".should.not.equal("bar")
3.should.satisfy { it % 2 == 1 }
3.should.be.above(2).and.below(4)
"abc".should.contain("bc").and.startWith("a")
"abc".should.not.have.length.above(3)
"abc".should.not.match(Regex("[0-9]+"))
listOf(1, 2, 3).should.contain(3).and.have.length.above(2)
listOf(1, 2, 3).should.contain.any.elements(1, 3, 4)
listOf(1, 2, 3).should.have.all.elements(1, 2, 3)
mapOf("foo" to "bar", "bar" to "foo").should.contain("foo" to "bar")
以及使用 expect
函数的示例:
expect(23).to.equal(23)
expect(null).to.be.`null`
expect("foo").not.to.equal("bar")
expect(3).not.to.satisfy { it % 2 == 1 }
expect(3).to.be.above(2).and.to.be.below(4)
expect("abc").to.contain("bc").and.to.startWith("a")
expect("abc").not.to.have.length.above(3)
expect("abc").not.to.match(Regex("[0-9]+"))
expect(listOf(1, 2, 3)).to.contain(3).and.to.have.length.above(2)
expect(listOf(1, 2, 3)).to.contain.any.elements(1, 3, 4)
expect(listOf(1, 2, 3)).to.have.all.elements(1, 2, 3)
expect(mapOf("foo" to "bar", "bar" to "foo")).to.contain("foo" to "bar")
许可证
Expekt 使用 MIT 许可,这意味着你可以自由地使用、修改并分发这个项目。
Expekt 能帮助你写出更优雅、更具表达力的测试代码,其简洁的 API 设计使得测试逻辑一目了然。不论是在大型项目中还是小型应用的开发过程中,都是提升测试体验的理想选择。立即尝试 Expekt,让测试工作更加得心应手!
expektBDD assertion library for Kotlin项目地址:https://gitcode.com/gh_mirrors/ex/expekt