python - python - 如何为python中的非失败方法编写测试用例以执行除块至少一次
问题描述
我创建了一个如下的python类 -
class MyClass:
mydict = {}
error = None
traceback = None
message = None
def create_log_message(self, **kwargs):
try:
error = kwars.get("error", self.error)
traceback = kwargs.get("traceback", self.traceback)
message = kwargs.get("message", self.message)
self.mydict = {"error": error, "traceback": traceback, "message": message}
return self.mydict
except Exception as e:
error = e
traceback = tb.format_exc()
message = kwargs.get("message", self.message)
self.mydict = {"error": error, "traceback": traceback, "message": message}
return self.mydict
下面是我的测试课-
import unittest import TestCase
import traceback as tb
import MyClass
class TestMyClass(TestCase):
def test_success(self): # Test in case of success
inst = MyClass()
mydict = inst.create_log_message(message="success")
self.assertEqual(mydict["error"], None)
self.assertEqual(mydict["traceback"], None)
self.assertEqual(mydict["message"], "success")
def test_failure(self): # test in case of exception
try:
1/0
except ArithmeticError as e:
error = e
traceback = tb.format_exc()
inst = MyClass()
mydict = inst.create_log_message(error=error, traceback=traceback, message="failure")
self.assertEqual(mydict["error"], error)
self.assertEqual(mydict["traceback"], traceback)
self.assertEqual(mydict["message"], "failure")
def test_no_args(self): # test for no argument being passed
inst = MyClass()
mydict = inst.create_log_message()
self.assertEqual(mydict["error"], None)
self.assertEqual(mydict["traceback"], None)
self.assertEqual(mydict["message"], None)
def test_extra_args(self): # test for any other argument
inst = MyClass()
mydict = inst.create_log_message(name="test")
with self.assertRaises(KeyError):
self.assertEqual(mydict["name"], "test")
self.assertEqual(mydict["error"], None)
self.assertEqual(mydict["traceback"], None)
self.assertEqual(mydict["message"], None)
我的问题是 MyClass 中的 except 块甚至没有被调用一次,即使我没有传递任何争论、匹配的参数或任何其他/额外的参数,因此代码覆盖率失败(不满足 100%),如何通过执行 except 块测试用例至少一次?我正在使用 python3.8x/ubuntu20.04。
在这方面的任何帮助都会非常有帮助:)
PS:如果我错过了任何细节,请原谅,因为这是我关于堆栈溢出的第一篇文章。
解决方案
首先,你真的需要那个 except 子句吗?你在处理什么错误?try 块中的代码不会引发任何异常,因此无法引发异常。我不会专注于如何测试该代码,而是将其删除。你不需要它。
推荐阅读
- python - `pyenv global xyz`和`pyenv shell xyz`有什么区别?
- javascript - svelte 可以使用可组合的函数吗?
- table-plus - 如何在 TablePlus GUI 中编辑索引
- python-3.x - Mlflow - 空的工件文件夹
- ios - 在 Swift 中,我什么时候使用“while let”?
- r - 将 NA 分配给 R 中的矩阵条目
- jquery - Vue组件中js库所需的JQUery
- css - 在 WordPress 中做了一些事情
- c++ - 这个字符反转功能有什么问题?
- node.js - Nodejs - 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头