python unittest.TestCase.assertRaises 不起作用

2024-01-11

我正在尝试在 Python 中对“add”函数运行测试,但出现错误:

7
E
======================================================================
ERROR: test_upper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:/Users/MaZee/PycharmProjects/andela/asdasd.py", line 22, in test_upper
    self.assertEqual("Input should be a string:", cm.exception.message , "Input is not a string:")
AttributeError: '_AssertRaisesContext' object has no attribute 'exception'

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

Process finished with exit code 1

这是我的代码:

    import unittest

    def add(a,b):
        """
        Returns the addition value of a and b.
        """
        try:
          out = a + b
        except TypeError:
          raise TypeError("Input should be a string:")

        print (out)
        return



class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        with self.assertRaises(TypeError) as cm:
           add(3,4)
           self.assertEqual("Input should be a string:", cm.exception.message , "Input is not a string:")


if __name__ == '__main__':
    unittest.main()

正如错误消息告诉您的那样,您的断言加注对象没有属性exception。更具体地说,这个调用:

cm.exception.message

cm在这种情况下是你的断言对象,并且因为你正在测试的代码实际上从未引发,所以你的cm对象不会有exception您尝试访问的属性。

现在,我们来看看为什么会发生这种情况。您正在尝试测试当exception正在你的身边长大add方法,为了提高TypeError。但是,如果您查看测试用例,则会将两个有效整数传递给add方法。您不会引发异常,因为这是一个有效的测试用例。

对于您的单元测试,您希望测试当您raise一些东西,即插入无效数据到add方法。再次尝试您的代码,但这一次在单元测试中,传递以下内容:

add(5, 'this will raise')

您现在将得到您的TypeError.

您还需要在上下文管理器之外执行断言验证:

def test_upper(self):
    with self.assertRaises(TypeError) as cm:
        add(3, 'this will raise')
    self.assertEqual("Input should be a string:", cm.exception.message, "Input is not a string:")

现在你会遇到另一个问题。没有message属性。你应该简单地检查一下cm.exception。此外,在你的add你的字符串的方法是:

"Input should be a string:"

但是,您正在检查它是否是:

"Input is not a string:"

所以,一旦你更正你的单元测试以使用cm.exception,您现在将面临:

AssertionError: 'Input should be a string:' != TypeError('Input should be a string:',) : Input is not a string:

因此,您的断言应该通过调用来检查异常字符串str on the cm.exception:

self.assertEqual("Input should be a string:", str(cm.exception), "Input should be a string:")

所以,你的完整测试方法应该是:

def test_upper(self):
    with self.assertRaises(TypeError) as cm:
        add(3, 'this will raise')
    self.assertEqual("Input should be a string:", str(cm.exception), "Input should be a string:")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python unittest.TestCase.assertRaises 不起作用 的相关文章

  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • 将 numpy 数组写入文本文件的速度

    我需要将一个非常 高 的两列数组写入文本文件 而且速度非常慢 我发现如果我将数组改造成更宽的数组 写入速度会快得多 例如 import time import numpy as np dataMat1 np random rand 1000
  • 如何使用显式引用转储 YAML?

    递归引用非常适合ruamel yaml or pyyaml ruamel yaml dump ruamel yaml load A A id001 id001 然而 它 显然 不适用于普通引用 ruamel yaml dump ruamel
  • 当我在 Pandas 中使用 df.corr 时,我的一些列丢失了

    这是我的代码 import numpy as np import pandas as pd import seaborn as sns import matplotlib pyplot as plt data pd read csv dea
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • Pandas 滚动窗口 Spearman 相关性

    我想使用滚动窗口计算 DataFrame 两列之间的 Spearman 和 或 Pearson 相关性 我努力了df corr df col1 rolling P corr df col2 P为窗口尺寸 但我似乎无法定义该方法 添加meth
  • 与 while 循环一样,如何跳过 for 循环中的步骤?

    我尝试像 while 循环一样跳过 for 循环中的几个步骤 在 while 循环中 步骤根据特定条件进行调整 如下面的代码所示 i 0 while i lt 10 if i 3 i 5 else print i i i 1 result
  • 在Python中计算内存碎片

    我有一个长时间运行的进程 不断分配和释放对象 尽管正在释放对象 但 RSS 内存使用量会随着时间的推移而增加 如何计算发生了多少碎片 一种可能性是计算 RSS sum of allocations 并将其作为指标 即便如此 我该如何计算分母
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows

随机推荐

  • Django South - 表已经存在

    我正在尝试从南方开始 我有一个现有的数据库 我添加了南 syncdb schemamigration initial 然后 我更新了models py添加一个字段并运行 manage py schemamigration myapp aut
  • 结构指令、位置工具提示

    我创建了一个结构指令 当我将鼠标悬停在文本 see tooltip 上时 该指令会根据 ng template 内的内容显示工具提示 工具提示显示正确 但它显示在屏幕的 top 0px left 0px 位置 我希望它显示在文本 see t
  • 带有标题栏和 Windows 任务栏的 Tkinter 窗口

    我已经广泛搜索这个问题 但似乎没有人知道 我在 python 2 7 中创建了一个简单的 tkinter 窗口 tcl 8 5 并希望它最大化 就像我点击右上角的最大化按钮一样 使用 fullscreenoption 不是一个选项 因为它删
  • Eclipse、Java:如何导入 zip 格式的库?

    好吧 这是基本的 但似乎正常的方法对我来说不起作用 我正在尝试导入 jSSC 库 用于与串行端口等进行通信 最新的库是 jSSC 0 9 0 Release 所以 我尝试了以下方法 将 zip 文件放置在工作区中 并将其添加为项目属性 gt
  • 从 Python 子进程执行 shell 脚本

    我需要从 python 调用 shell 脚本 问题是 shell 脚本在完成之前会问几个问题 我找不到使用的方法subprocess 使用pexpect似乎有点过头了 因为我只需要启动它并向它发送几个 是 请不要建议需要修改 shell
  • eclipse 外部工具配置 -> 类路径中引用的库不存在:org.eclipse.swt

    更新到最新的 eclipse mars 版本后 版本 Mars 候选版本 1 4 5 0RC1 内部版本号 20150521 1252 我无法启动任何 Ant 脚本 它总是会导致以下错误 首先我检查路径是否真的正确 并确保特定的jarorg
  • 将轮廓路径转换为 ​​svg 路径

    我正在使用 openCV 和 python 从图像中提取轮廓 现在我需要将这些轮廓路径 列表 导出为 svg 路径 我怎样才能做到这一点 code ret thresh cv2 threshold imgray 27 25 0 contou
  • 如何生成“随机”但又“唯一”的数字?

    随机数是如何生成的 java等语言如何生成随机数 特别是GUID是如何生成的 我发现像伪随机数生成器这样的算法使用初始值 但我需要创建一个随机数程序 其中一旦出现的数字就永远不会重复 即使系统重新启动等也是如此 我认为我需要将这些值存储在任
  • 从 firebase 数据库检索数据到 textview 时如何创建换行符?

    我知道如果我想创建一个新行 我必须插入 n无论我需要在哪里创建该线 但我得到的是没有我在 firebase 数据库中已有的行的文本 有人可以告诉我如何解决这个问题吗 例如 如果我在数据库中有 hello n world 我明白了hello
  • jqGrid 自定义编辑对话框

    我正在开发一个使用 jqGrid 的应用程序 问题是在行编辑时出现的编辑对话框必须具有特定的布局 所以我更愿意通过ajax加载它 然后手动将数据发送回jqGrid 我在论坛上搜索了很多 但找不到如何执行此操作的示例 因此 我只需要 jqGr
  • 如何确定应用程序包中是否存在文件?

    抱歉 今天的第二个问题很愚蠢 是否可以确定应用程序包中是否包含文件 我可以毫无问题地访问文件 即 NSString pathAndFileName NSBundle mainBundle pathForResource fileName o
  • SQL ON DELETE CASCADE,删除以哪种方式发生?

    如果我在数据库中有两个关系 如下所示 CREATE TABLE Courses CourseID int NOT NULL PRIMARY KEY Course VARCHAR 63 NOT NULL UNIQUE Code CHAR 4
  • 在位图android上添加水效果

    如何在位图图像中添加水波 我在这里发现了触摸事件的水波纹效果 https github com esteewhy whater https github com esteewhy whater但无法在我的单个位图上实现 谁能帮忙在我的位图上
  • 使用 ExecuteSqlCommand() 创建触发器抛出“‘TRIGGER’一词附近的语法不正确。”

    这似乎是我遗漏了一个简单的细节 我只是不明白是什么 有了这个 string deleteTrigger IF OBJECT ID p0 IS NOT NULL DROP TRIGGER p1 string createTrigger CRE
  • 从响应头中删除服务器信息和 PHP 信息

    我怎样才能预防server info and php info显示在响应头中 对于服务器信息 在 apache2 conf 中添加以下行 ServerTokens ProductOnly ServerSignature Off 对于 PHP
  • SQL存储过程执行计划性能不佳——参数嗅探

    我有一个存储过程 它接受日期输入 如果没有传入值 则稍后将其设置为当前日期 CREATE PROCEDURE MyProc MyDate DATETIME NULL AS IF MyDate IS NULL SET MyDate CURRE
  • 在Excel中使用True、False、1、0作为VLOOKUP的最后一个值有什么区别?

    在Excel中 vlookup函数末尾有一个可选参数 称为 范围查找 或 not exact match 您可以为此值输入 1 0 true 或 false 它们之间有什么区别以及它是如何工作的 公式中的最后一个值有时称为Range Inp
  • 新 Xcode 项目中的 MainWindow.xib 在哪里?

    我使用 TabBar 模板在 Xcode 4 中启动了一个新项目 我注意到没有MainWindow xib项目中的文件 Apple 是否删除了该文件 如果没有这个文件 我如何访问主窗口 MainWindow xib 一开始有点多余 请记住它
  • 匿名类型的非只读替代方案

    在 C 中 匿名类型可以如下所示 method doStuff var myVar new a false b true if myVar a Do stuff 但是 以下内容将无法编译 method doStuff var myVar n
  • python unittest.TestCase.assertRaises 不起作用

    我正在尝试在 Python 中对 add 函数运行测试 但出现错误 7 E ERROR test upper main TestStringMethods Traceback most recent call last File C Use