首页
学习
活动
专区
工具
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获得进程退出状态。但是前提是要安装open4的gem。

    3.3K20

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

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

    16730

    Node.js创造者,Ryan Dahl专访

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

    1.4K41

    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

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

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

    78710

    Python错误、异常和模块

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

    1.3K40

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

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

    79120

    Python错误、异常和模块

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

    11210

    约束和异常处理

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

    64410

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

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

    10310

    Python 异常处理完整指南

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

    1.8K100

    JAVA 中异常处理的最佳实践

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

    1.7K80
    领券