
126
|
第
7
章
可以通过多种方式来组织此测试,但是使用这种方式也意味着该代码的重点是运行测
试,而且还要打印站点。注意,使用作用域函数会将整个测试转换为单个表达式,从而
允许使用较短的语法。
在测试中also 函数的调用位于 run 函数的前面,因为 run 函数返回
lambda 表达式的返回值而不是上下文对象。
顺便说一句,尽管可以使用 apply 函数代替 run 函数,但是应该假设 JUnit 测试返回
了 Unit。示例 7-5 中的 run 调用做到了这一点(因为断言不返回任何内容),而 apply
则会返回上下文对象。
参阅
7.1 节讨论了 apply 函数。
7.3
使用
let
函数与
Elvis
问题
如何仅在非空引用上执行代码块,否则返回默认值?
解决方案
对 let 作用域函数进行安全调用,并结合 Elvis 操作符。
讨论
let 函数是任意泛型 T 上的扩展函数,它在标准库中的实现参见示例 7-6。
示例 7-6:标准库中的 let 函数的实现
public inline fun <T, R> T.let(
block: (T) -> R
): R
有关 let 的一个需要谨记的关键事实是,它返回 block 的结果而不是上下文对象。因此
它就像一个上下文对象的转换器,这有点像对象的映射。假设你需要获取一个字符串并
将其内容转为大写,但是需要对空字符串进行特别处理,参见示例 7-7。