标签: python-unittest

Pythonunittest发现无法导入源代码

我使用 VSCode 中集成的 Python unittest 进行测试。我有这样的目录

project_root/
  src/
    module/
      __init__.py
      a.py
  test/
    module/
      __init__.py
      test_a.py
Run Code Online (Sandbox Code Playgroud)

test_a.py进口from module.a import SomeClass

我有参数

"-v",
"-s",
"./test",
"-p",
"test*.py"
Run Code Online (Sandbox Code Playgroud)

当运行测试发现时,它失败并引发ModuleNotFoundCan not import模块或类a.py

PS:我已经设置了PYTHONPATHsettings.json代码分析和程序启动都工作正常。但似乎对插件没有帮助unittest。一个问题是,两个src,test都有命名的模块module,我不确定这是否重要。

如何让它发挥作用?

更新:似乎这是一个名称冲突问题,unittest_discovery 无法处理此问题。在我更改 args 后,-s ./test/module它可以导入 src 模块。

python python-unittest visual-studio-code

2
推荐指数
1
解决办法
2685
查看次数

Argparse 和 unittest.main()

我刚刚在单元测试中添加了一个图形实用程序——基本上,测试的全自动版本只是进行数值比较,但我希望人们能够要求绘图。

如果我使用我的新参数,仅仅使用 argparseunittest.main()就会令人窒息。我目前正在做的是检查该参数,然后从中删除它sys.argv似乎是错误的

有没有更好的方法给这只猫剥皮?

  • 一种告诉 argparse 使用 sys.argv 参数的方法。可能还是错的,但不是我做的,所以没关系。
  • 一种告诉 argparse 吐出 sys.argv 版本并删除所有“使用的参数”的方法 - 这会很酷,因为它看起来unittest.main()会采用备用 argv。
  • 一种告诉unittest.main()忽略争论的方法。
if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Test correction'
    )
    parser.add_argument(
        '--plot-results',
        help='Plot results of cal test',
        action='store_true'
    )
    args = parser.parse_args()

    if args.plot_results:
        while '--plot-results' in sys.argv:
            sys.argv.remove('--plot-results')

    unittest.main()
Run Code Online (Sandbox Code Playgroud)

python argparse python-unittest

2
推荐指数
1
解决办法
229
查看次数

使用 python 单元测试模拟 os.environ

我正在尝试测试一个根据给定参数为我处理工作目录的类。为此,我们使用类变量来映射它们。

当传递特定值时,将从环境变量中检索路径(请参见baz下面的示例)。这是我正在尝试测试的具体案例。

我正在使用 Python3.8.13unittest.

我试图避免:

  • 我不想模拟WorkingDirectory.map字典,因为我想确保我们从environ特定变量(BAZ_PATH)中获取。
  • 除非是唯一的解决方案,否则我想避免在测试期间编辑值,即我不想做类似的事情:os.environ["baz"] = DUMMY_BAZ_PATH

我尝试过的

我尝试按照其他出版物中的建议将其模拟environ为字典,但由于某种原因我无法使其工作。

# working_directory.py
import os


class WorkingDirectory:
    map = {
        "foo": "path/to/foo",
        "bar": "path/to/bar",
        "baz": os.environ.get("BAZ_PATH"),
    }

    def __init__(self, env: str):
        self.env = env
        self.path = self.map[self.env]

    @property
    def data_dir(self):
        return os.path.join(self.path, "data")

    # Other similar methods...
Run Code Online (Sandbox Code Playgroud)

测试文件:

# test.py

import os
import unittest

from unittest import mock

from working_directory import WorkingDirectory

DUMMY_BAZ_PATH = "path/to/baz" …
Run Code Online (Sandbox Code Playgroud)

python unit-testing environment-variables python-unittest

2
推荐指数
1
解决办法
1710
查看次数

如何解决错误:Zip参数#1必须支持迭代

我有两个具有相同问题的测试方法,这里是主类中的原始方法:

def get_num_words(self, word_part):
    """ 1 as default, may want 0 as an invalid case """
    if word_part[3] == '0a':
        self.num_words = 10
    else:
        self.num_words = int(word_part[3])
    return self.num_words

def get_num_pointers(self, before_at):
    self.num_pointers = int(before_at.split()[-1])
    return self.num_pointers
Run Code Online (Sandbox Code Playgroud)

以下是两个测试类:

def test_get_num_words(self):
    word_part = ['13797906', '23', 'n', '04', 'flood', '0', 'inundation', '0', 'deluge', '0', 'torrent', '0', '005', '@', '13796604', 'n', '0000', '+', '00603894', 'a', '0401', '+', '00753137', 'v', '0302', '+', '01527311', 'v', '0203', '+', '02361703', 'v', '0101', '|', 'an', 'overwhelming', 'number', 'or', …
Run Code Online (Sandbox Code Playgroud)

python unit-testing python-unittest

1
推荐指数
1
解决办法
2万
查看次数

Python self.assertRaises

我有一个如下的小代码,请帮助我以正确的方式写这个.我想检查ID是否存在value,如果不存在则会引发异常.

value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})

with self.assertRaises(IndexError, value[0]["ID"]):
    print "not an error"
Run Code Online (Sandbox Code Playgroud)

python unit-testing assertraises python-unittest

1
推荐指数
1
解决办法
4504
查看次数

如果测试失败,则显示实际值

说我有这样的测试:

self.assertTrue( car.color == 'blue') 
Run Code Online (Sandbox Code Playgroud)

我用它来运行它

nosetests test_car.py -x -v --stop
Run Code Online (Sandbox Code Playgroud)

如果失败了,我希望打印出car.color的实际值.有没有办法做到这一点?

python python-unittest

1
推荐指数
1
解决办法
39
查看次数

Python:知道函数是从单元测试中调用的吗?

有没有办法在Python中知道从单元测试执行或调试运行的上下文调用函数?

对于上下文,我正在尝试对使用执行数据库调用的函数的代码进行单元测试.为了避免在测试该函数期间进行数据库调用(DB调用单独测试),我试图让DB IO函数知道它们的环境,并模拟在单元测试中调用它们并在调试期间记录其他变量跑.

我目前的方法是读取/写入环境变量,但它似乎有点过分,我认为Python必须有更好的机制.

编辑: 以下是我尝试进行单元测试的函数示例:

from Database_IO import Database_read

def some_function(significance_level, time_range)
    data = Database_read(time_range)
    significant_data = data > significance_level
    return significant_data
Run Code Online (Sandbox Code Playgroud)

python python-2.7 python-unittest

1
推荐指数
1
解决办法
198
查看次数

Python:在unittest框架的测试用例中将一次性初始化放在哪里?

我的测试很简单。我想向两个不同的服务器发送两个请求,然后比较结果是否匹配。

我要测试以下内容。

  1. 发送每个请求,并查看返回码是否有效。
  2. 比较每种测试方法中输出的不同部分

I do not want to send the requests in setUp method because it will be send over and over for each new test. I would rather want to send the requests at the initialization. (maybe in the init method). But I found a lot of people were against that idea because they believe I should not override the init method for some reason. (I do not know exactly why) If that's the case, where should I …

python unit-testing python-2.7 python-unittest

1
推荐指数
1
解决办法
1611
查看次数

在unittest python中解析命令行参数

我正在使用unittest模块在python中创建一个测试用例。

我确实创建了一个我想从用户那里得到的解析参数列表。但是,当我在执行python脚本时使用该参数时,它给出了错误:“ option -i无法识别用法:testing.py [options] [test] [...]”

代码段:

class Testclass(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print "Hello Class"

    def test_addnum(self):
        print "Execute the test case"
        #parser = parse_args(['-i'])
        print 'simple_value     =', args.inputfile

    def parse_args():
        parser = argparse.ArgumentParser()
        parser.add_argument('-i', help='input file', dest='inputfile')
        ns, args = parser.parse_known_args(namespace=unittest)
        #args = parser.parse_args()
        return ns, sys.argv[:1] + args

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

执行上面的脚本时出现的错误m -i somefile.txt是:

option -i not recognized
Usage: testing.py [options] [test] [...]

Options:
  -h, --help       Show this message
  -v, --verbose    Verbose output
  -q, …
Run Code Online (Sandbox Code Playgroud)

python argparse python-unittest

1
推荐指数
1
解决办法
1277
查看次数

Python:为什么unittest assertEqual会在这些列表上抛出错误而不是失败?

Python 2.7和3.4:为什么test_unexpected_error测试会抛出错误而不是失败?

import unittest


class TestLists(unittest.TestCase):

    def test_unexpected_error(self):
        self.assertEqual([0] * 1000 + [1], [1] + [0] * 1000)

    def test_fails_as_expected(self):
        self.assertEqual([0] * 1000 + [1], [0] * 1000 + [0])


if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

错误是:

RuntimeError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

回溯(删节 - 递归错误是一个递归错误是一个递归错误是....)

Traceback (most recent call last):
  File "sotest.py", line 7, in test_unexpected_error
    self.assertEquals([0] * 1000 + [1], [1] + [0] * 1000)
  File "/usr/lib/python2.7/unittest/case.py", line 513, in assertEqual
    assertion_func(first, second, …
Run Code Online (Sandbox Code Playgroud)

python python-unittest

1
推荐指数
1
解决办法
155
查看次数