当前位置:网站首页>《scala 编程(第3版)》学习笔记4
《scala 编程(第3版)》学习笔记4
2022-08-02 03:28:00 【Code_LT】
第14章 断言和测试
- Predef的
assert(condition)或assert(condition,explanation),condition如果不满足,则抛出AssertionError。explanation类型为Any,可以传入任何对象,将调用对象的toString打印输出。P258
scala> assert(false,"test error")
java.lang.AssertionError: assertion failed: test error
at scala.Predef$.assert(Predef.scala:170)
... 32 elided
- Predef的
ensuring(condition),这里的condition为结果类型参数并返回Boolean的前提条件函数(即condition为函数)。使用方法为{代码块}ensuring(condition(x)),ensuring将{代码块}的结果x传递给condition(x)函数,如果condition(x)为true,则ensuring返回结果x,否则抛出AssertionError。P259
def func(a:Int):String={
a.toString
}ensuring(_.length>2,"msg: 位数小于3")
scala> func(2)
java.lang.AssertionError: assertion failed: msg: 位数小于3
at scala.Predef$Ensuring$.ensuring$extension3(Predef.scala:261)
at .func(<console>:14)
... 32 elided
- ensuring一般用于内部测试,断言(assert, ensuring)可通过
JVM -ea -da来分别打开或关闭。P260 - 外部测试,ScalaTest框架(官方指导),FunSuite风格。
- scalatest涉及三方jar包导入,idea的三方jar包导入方式(单个,批量),导入后即可正常
org.scalatest.FunSuite(3.2.0版开始已经没有Funsuit了,而是用funsuite.AnyFunSuite(官方指导))。当然,也可以使用构建maven工程+pom.xml方式导入。(todo:有时间单独出一期直接导入和pom导入的教程)
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest-funsuite_2.11</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
import org.scalatest.funsuite
class MyTest extends funsuite.AnyFunSuite {
val s = "a b c d"
//assert 一般断言
test("长度大于4"){
assert(s.length > 4)
}
test("长度大于8"){
assert(s.length >8)
}
//assertResult 将预期与实际值区分开来;
val a = 5
val b = 2
assertResult(2) {
a - b
}
//assertThrows 以确保一些代码抛出预期的异常。捕获正确异常,则返回succeeded的Assertion,否则,返回TestFailedException
val s2 = "hi"
assertThrows[IndexOutOfBoundsException] {
// Result type: Assertion
s2.charAt(-1)
}
//intercept和assertThrows 表现一样,但若捕获正常异常的话,则返回IndexOutOfBoundsException。
val caught =
intercept[IndexOutOfBoundsException] {
// Result type: IndexOutOfBoundsException
s2.charAt(-1)
}
assert(caught.getMessage.indexOf("-1") != -1)
//带clue版本
assert(1 + 1 === 3, "this is a clue")
assertResult(3, "this is a clue") {
1 + 1 }
withClue("this is a clue") {
assertThrows[IndexOutOfBoundsException] {
"hi".charAt(-1)
}
}
}
边栏推荐
- Anaconda报错:An unexpected error has occurred. Conda has prepared the above report 解决办法
- 清理c盘爆满告急,C盘清理
- Visual Studio2022创建setup项目
- php的curl函数模拟post数据提交,速度非常慢
- 浅谈性能优化:APP的启动流程分析与优化
- C# 常用方法记录
- 功能强大的黑科技网站--10连
- [Spark]-LSH局部敏感哈希
- electron-builder打包不成功解决方法
- Temporal Segment Networks:Towards Good Practices for Deep TSN论文精读笔记
猜你喜欢

最简单的FRP内网穿透教程

BSN:Boundary-Sensitive Network for Temporal Action Proposal Generation论文阅读笔记

Laravel打印执行的SQL语句

快速搭建一个网关服务,动态路由、鉴权的流程,看完秒会(含流程图)

解决flex布局warp自动换行下最后一行居中问题

Visual Studio2022创建setup项目

保证接口数据安全的10种方案

自定义ViewGroup实现搜索栏历史记录流式布局

成本会计的概念、产品成本核算的要求、产品成本核算的对象与成本项目、产品成本的归集和分配(可能考判断)、产品成本计算方法 (三种:产品的品种(品种法),批次(分批法),步骤(分步法))

分布式消息队列平滑迁移技术实战
随机推荐
聊聊MySQL的10大经典错误
借贷记账法下的账户结构、借贷记账法的记账规则、借贷记账法下的账户对应关系与会计分录
(不重点考)试算平衡的分类
帧动画和补间动画的使用
laravel-admin 列表图片点击放大
重点考:从债劵的角度来看交易性金融资产
账务处理程序、记账凭证账务处理程序、汇总记账凭证账务处理程序、科目汇总表账务处理程序、会计信息化概述、信息化环境下会计账务处理的基本要求(此章出1道小题)
一文理解分布式开发中的服务治理
Spark特征工程-one-hot 和 multi-hot
ontop-vkg 学习1
英语每日打卡
分布式消息队列平滑迁移技术实战
Binder机制详解(三)
Laravel随笔记录
Temporal action localization in untrimmed videos via Multi-stage CNNs SCNN论文阅读笔记
【泰山众筹】模式为什么一直都这么火热?是有原因的
完整安装 Laravel-Admin 框架
公司产品太多了,怎么实现一次登录产品互通?
深度学习实战(1):花的分类任务
[Spark]-LSH局部敏感哈希