首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你如何抛出另一个ruby模块的异常?(使用assert_throws)

在Ruby中,抛出异常是一种处理错误的方法。要抛出异常,可以使用raise关键字。要捕获异常,可以使用beginrescueensureend关键字。在测试中,可以使用assert_throws方法来测试异常是否被抛出。

例如,假设我们有一个模块my_module,其中定义了一个方法my_method,该方法在某些情况下会抛出异常。我们可以在测试中使用assert_throws方法来测试该异常是否被抛出。

代码语言:ruby
复制
require 'test/unit'

class MyModuleTest< Test::Unit::TestCase
  def test_my_method_throws_exception
    assert_throws(:my_exception) { my_module.my_method }
  end
end

在上面的代码中,assert_throws方法接受一个异常标签作为参数,并且在块中调用my_method方法。如果my_method方法抛出了一个异常,并且该异常的标签与指定的标签匹配,则测试将通过。如果my_method方法没有抛出异常,或者抛出的异常标签与指定的标签不匹配,则测试将失败。

需要注意的是,assert_throws方法只能捕获在块中抛出的异常,而不能捕获在块中调用的其他方法中抛出的异常。此外,assert_throws方法只能用于捕获标签异常,而不能用于捕获其他类型的异常。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《Effective-Ruby》读书笔记

确保阅读了第 35 条,来看看 Ruby 2.0 中 prepend 方法是如何使其复杂化) 要点回顾: 要寻找一个方法,Ruby 只需要向上搜索类体系。...Ruby 语言仅仅在私有方法上加了一条限制————它们不能被显式接受者调用 # 无论在继承关系中哪一级,只要你没有使用接受者,都可以调用祖先方法中私有方法,但是不能调用另一个对象私有方法 #...第四章:异常 第 22 条:使用定制异常而不是抛出字符串 避免使用字符串作为异常,它们会被转换成原生 RuntimeError 对象。...只捕获那些知道如何恢复异常 当捕获异常时,首先处理最特殊类型。...如果已经这么做了,就应该想想你真正想做是不是可以通过 ensure 语句来实现 在异常发生情况下,从 resuce 语句中抛出异常将会替换当前异常并离开当前作用域 第 24 条:通过块和 ensure

4K60

Ruby 和 Java 基础语法比较

将获得和了解: Ruby 语言基本语法和使用方式 Java 语言基本语法和使用方式 从老司机角度分析和讲解 Ruby 和 Java 语言语法特点和区别 它们各自适合并且擅长应用场景 网上单独介绍...通过一个简单 Hello World 程序就可以发现两者明显区别: Ruby 执行是从上到下顺序执行,main 方法则是 Java 程序唯一入口 Ruby 不必用 ; 号结束符,不必使用 {}...Mix-in 模块使用 module 关键字创建,命名规则和类一样,首字母必须大写,我们先来看看如何创建模块 module Display def open p "open display..."...p h.zero #=>"执行异常逻辑" #=>50 上述程序非常简单,大概逻辑是首次执行会抛出异常,然后被 rescue 捕获后重新复制,第二次运算成功,Java 如果要实现相同语义的话,则代码没有这么简洁了...Ruby 和 Java 在其他使用层面的使用区别对比,例如字符串,数据类型,集合,哈希,最后想留一个问题:觉得静态语言和动态语言最明显区别在哪里?

2.2K20
  • 异步函数中异常处理及测试方法

    将学到什么 通过后面的内容将学到: 如何从 Javascript 异步函数中抛出错误 如何使用 Jest 测试来自异步函数异常 要求 要继续往下读你应该: 对 Javascript 和 ES6...有基本了解 安装 Node.Js 和 Jest 如何从 Javascript 常规函数中抛出错误 使用异常而不是返回码(清洁代码)。...抛出错误是处理未知最佳方法。 同样规则适用于各种现代语言:Java、Javascript、Python、Ruby可以从函数中抛出错误,可以参照以下示例: ?...总结 最后总结一下: 从异步函数抛出错误不会是“普通异常”。 异步函数和异步方法总是返回一个Promise,无论是已解决还是被拒绝。 要拦截异步函数中异常,必须使用catch()。...以下是在Jest中测试异常规则: 使用 assert.throws 来测试普通函数和方法中异常 使用 expect + rejects 来测试异步函数和异步方法中异常 如果如何使用 Jest

    3K30

    《Python分布式计算》第2章 异步编程 (Distributed Computing with Python)协程一个异步实例总结

    看一下传统程序中这些任务是如何使用一个CPU。考虑一个原生实例,它有四个任务:A、B、C、D。这些任务具体是做什么在这里不重要。我们可以假设这四个任务是关于计算和I/O操作。...当序列到头时,next()会抛出异常StopIteration。Python中for循环使用了同样机制,它调用迭代器next(),通过获取异常StopIteration得知何时停止。...下面代码展示了在shell中如何使用这个协程: >>> from coroutines import complain_about >>> c = complain_about('Ruby') >>>...执行complain_about('Ruby')产生了协程。为了使用新建协程,我们用next()调用它,与在生成器中所做相同。...我们可以调用close()方法停止协程,它可以在协程内部抛出异常GeneratorExit。此时,协程唯一能做就是清理数据并退出。

    1.5K100

    Ruby执行shell命令六种方法

    Ruby中,执行shell命令是一件不奇怪事情,Ruby提供了大概6种方法供开发者进行实现。这些方法都很简单,本文将具体介绍一下如何Ruby脚本中进行调用终端命令。...通过检测退出状态码我们可以在ruby脚本中抛出异常或者进行重试操作。 注:在Unix-like系统中进程退出状态码以0和非0表示,0代表成功,非0代表失败。...反引号(`) 使用反引号是shell中常用获取命令输出内容方法,在ruby中也是可以,而且一点都需要做改变。使用反引号执行命令也会将命令在另一个进程中执行。...IO#popen IO#popen也是一种执行命令方法,其命令也是在另外进程中执行。使用popen可以像操作IO对象一样处理标准输入和输出。...也可以通过Process::waitpid2 加上对应进程ID获得进程退出状态。但是前提是要安装open4gem。

    3.2K20

    尝试Java,从入门到Kotlin(上)

    Checked Exception Java是Checked Exception。这就是说,如果写了一个方法,这个方法会抛出一些异常,那么需要用throws关键字标明这个方法会抛出哪些异常。...这个特性在用得好的人手里,对正确处理各种边边角角异常十分有用。然而,如果在你无法自己选队友,无法控制开发人员水平情况下,很可能会发现,所有的方法都被标记为throws Exception。...由于Checked Exception是类型系统一部分,一个不抛出异常函数和一个会抛出异常函数,它们类型是不相同。这就导致了JavaLambda泛用性大大减少而且不是很好用。...Ruby则依靠函数调用可以省略括号特性,使getter方法看起来很像直接访问字段。...另一个方案是使用Lombok,通过Data,Getter,Setter等注解,让编译器在编译时自动生成getter方法和setter。

    15730

    Python错误、异常模块

    利用raise语句可以主动抛出一个异常,但抛出异常必须是要继承于Exception异常类或者异常示例。...模块 第二部分就是模块,我们有时可能会在不同文件之间利用同一个函数,笨一点做法就是copy来copy去,Python提供了一个机制可以在将一个文件中内容导入另一个文件中使用,这样文件就可以称为模块...= 0:     ...:             result.append(i)     ...:     return result 然后我们可以在另一个文件中导入这个模块,如果我们想使用这个函数的话..., 13, 15, 17, 19] 如果只想用一个模块某个子模块,那么在导入时就可以指明需要导入部分,这样子模块就可以单独使用,不必在以模块名.函数名形式: In [22]: from odd_num...、模块两方面常用知识一些概括,如果对更高阶使用感兴趣可以查找Python官方文档,里面会有更加详细介绍。

    1.2K40

    Python之错误和异常模块(基础系列第四篇)

    利用raise语句可以主动抛出一个异常,但抛出异常必须是要继承于Exception异常类或者异常示例。...模块 第二部分就是模块,我们有时可能会在不同文件之间利用同一个函数,笨一点做法就是copy来copy去,Python提供了一个机制可以在将一个文件中内容导入另一个文件中使用,这样文件就可以称为模块...= 0: ...: result.append(i) ...: return result ...: 然后我们可以在另一个文件中导入这个模块,如果我们想使用这个函数的话..., 13, 15, 17, 19] 如果只想用一个模块某个子模块,那么在导入时就可以指明需要导入部分,这样子模块就可以单独使用,不必在以模块名.函数名形式: In [22]: from odd_num...、模块两方面常用知识一些概括,如果对更高阶使用感兴趣可以查找Python官方文档,里面会有更加详细介绍。

    78320

    Node.js创造者,Ryan Dahl专访

    我在那里呆了一年,处于饥饿学生模式中,我和Eric找到了一份工作, 使用Ruby on Rails为一个滑雪板公司做网站, 这就是我编程生涯起点。...我想这让我开始思考,我真的很喜欢Ruby发展,可以使用Ruby更清楚地表达想法。...Pramod: 构建Web应用程序非常有趣,Ruby是个完美的工具,接下来继续在德国做一名自由网站开发者。所从事项目之一是Node,在德国时接下来六到八个月里会一直为之努力吗?...结合我正在为Engineyard项目开发Nginx模块表现,我开始思考了。在Nginx上一切都是异步,所以当你为它建立一个模块时,必须非常小心以避免阻塞。...知道,如果有一系列actions,可以这样理解:做A时,等待一个响应,也许抛出异常,做B时,等待响应,抛出异常。但在Node中,这是比较困难,因为必须跳转到另一个函数调用中。

    1.3K41

    Python中网关:WSGI

    诞生于日出之国Ruby起初并未在江湖上掀起波浪,直到丹麦少年为其诞下一子——Ruby On Rails后,才母以子贵,为世人所熟知。 既生瑜,何生亮。...和CGI一样,通常情况下我们需要显示控制HTTP头部输出,就是200(正常返回)和301/302(重定向)这两种情况。因为类似404或者502之类异常错误码,Web服务器肯定会自动抛出。...wsgiref wsgiref模块是python官方库针对wsgi协议一个参考实现,虽然与工业界标准或有差距,但用来学习基本够用。同时该模块实现了一个简单wsgi协议HTTP服务器。...我们需要聚焦是,虽然使用了一个第三方库,启动server代码与wsgiref模块不太相同,但是我们之前编写application回调函数可以直接在这里使用。...也就是说我们回调是与具体server无关,更换另一个支持wsgi协议server,只是在启动代码做些修改,而我们所关心业务逻辑则丝毫无需改动。

    1.3K20

    Python错误、异常模块

    raise语句可以主动抛出一个异常,但抛出异常必须是要继承于Exception异常类或者异常示例。...模块第二部分就是模块,我们有时可能会在不同文件之间利用同一个函数,笨一点做法就是copy来copy去,Python提供了一个机制可以在将一个文件中内容导入另一个文件中使用,这样文件就可以称为模块,...= 0: ...: result.append(i) ...: return result然后我们可以在另一个文件中导入这个模块,如果我们想使用这个函数的话,...7, 9, 11, 13, 15, 17, 19]如果只想用一个模块某个子模块,那么在导入时就可以指明需要导入部分,这样子模块就可以单独使用,不必在以模块名.函数名形式:ini 代码解读复制代码...、模块两方面常用知识一些概括,如果对更高阶使用感兴趣可以查找Python官方文档,里面会有更加详细介绍。

    9610

    Java Review(三十二、异常处理)

    异常机制己经成为判断一门编程语言是否成熟标准,除传统像 C 语言没有提供异常机制之外,目前主流编程语言如 Java、 C# 、 Ruby、 Python 等都提供了成熟异常机制 。...一种解决方案是捕获并重新抛出所有的异常,这种解决方案并不完美,这是因为需要在两个地方清除所分配资源。一个在正常代码中;另一个异常代码中。...Java 有一种更好解决方案,这就是 finally 子句。下面将介绍 Java 中如何恰当地关闭一个文件。如果使用 Java 编写数据库程序,就需要使用同样技术关闭与数据库连接。...finally 子句将使得方法返回 0, 这个返回值覆盖了原始返回值 4 抛出异常 使用throws声明抛出异常 使用throws声明抛出异常思路是:当前方法不知道如何处理这种类型异常,该异常应该由上一级调用者处理...;如果main方法也不知道如何处理该类型异常,也可以使用throws声明抛出异常,该异常交给JVM处理,JVM对异常处理方法是:打印异常跟踪栈信息,并终止程序运行。

    77210

    约束和异常处理

    本节主要内容: 1.类约束 2.异常处理 3.自定义异常 4.日志 一.类约束 ⾸先, 要清楚. 约束是对类约束.  比如. 现在. 是一个项⽬经理. 然后呢. 给手下 的人分活....看一眼. 张三和王五还算OK 这个李四写是 什么鬼?  denglu.......难受不. 但是好歹能用. 还能凑合. 但是这时. 这边要使用了. 问题就来了.  对于张三和王五代码....2.使用人为抛出异常方案,并且尽量抛出是NotImplementError.这样比较专业,而且错误比较明确....方案二:抛出一个异常. 那如何抛出异常呢?...上面的代码引入了另一个模块traceback,这个模块可以获取到我们每个方法调用信息.又被称为堆栈信息, 这个信息对我们拍错是很有帮助 四.日志 在编写任何一款软件时候,都会出现各种各样问题或者

    63610

    JAVA 中异常处理最佳实践

    前言 异常处理问题之一是知道何时以及如何使用它。我会讨论一些异常处理最佳实践,也会总结最近在异常处理上一些争论。 作为程序员,我们想要写高质量能够解决问题代码。...C++社区花了好久才决定如何使用异常。这场争论也在JAVA社区产生了。我看到不少JAVA开发人员艰难使用异常。...但是,该异常并没有影响到我业务逻辑模块,它无需进行异常处理,更何况它根本无法对 SQLException进行任何操作。如果我catch块需要根异常原因,可以使用 getCause()方法。...客户端可以使用这些方法来获取有用信息。但是如果不准备添加这些额外信息,那就抛出一个标准异常即可。...通过为异常编写测试,不仅能记录异常如何触发,而且使代码在经过这些测试后更加健壮。

    1.7K80

    Python 异常处理完整指南

    使用通用方式来捕获异常.如果一个程序知道如何处理ValueError, 它将不需要任何特定代码或修改。...不过这些都不是强制,越小Python模块可能越想把异常整合在他们唯一模块中。通常如果代码小到只有一个文件,就不用非得把代码和异常分成不同文件或者模块。...异常包裹 包装异常 就是将一个异常封装到另一个异常中: class MylibError(Exception): """Generic exception for mylib""" def...因此, 它将其它模块各个场景异常封装到自己一组异常类中.Python 3引入了raise from来解决这个问题,Tooz利用它来抛出自己错误。...如果(应该)使用 logging 库,当有程序发生异常时,可以使用exc_info参数来记录完整追踪, 在你调试服务或不可恢复故障时会变得非常有用: try: do_something(

    1.8K100

    关于“Python”核心知识点整理大全22

    9.4.6 在一个模块中导入另一个模块 有时候,需要将类分散到多个模块中,以免模块太大,或在同一个模块中存储不相关类。 将类存储在多个模块中时,可能会发现一个模块类依赖于另一个模块类。...9.7 小结 在本章中,学习了:如何编写类;如何使用属性在类中存储信息,以及如何编写方法,以 让类具备所需行为;如何编写方法__init__(),以便根据类创建包含所需属性实例。...见识 了如何修改实例属性——包括直接修改以及通过方法进行修改。还了解了:使用继承可简化 相关类创建工作;将一个类实例用作另一个属性可让类更简洁。...最后,学习了编写类时应遵循Python约定。 在第10章中,将学习如何使用文件,这让你能够保存在程序中所做工作,以及让用户 做工作。...还将学习异常,这是一种特殊Python类,用于帮助你在发生错误时采取相应措施

    9810
    领券