标签: python-unittest

在setup()中输出pyunit测试名称的方法

在python中有没有办法让pyunit测试输出它当前正在运行的测试.例:

def setUp(self):
    log.debug("Test %s Started" % (testname))

def test_example(self):
    #do stuff

def test_example2(self):
    #do other stuff

def tearDown(self):
    log.debug("Test %s Finished" % (testname))
Run Code Online (Sandbox Code Playgroud)

python unit-testing python-unittest

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

Python单元测试:测试失败时自动运行调试器

有没有办法在单元测试失败时自动启动调试器?

现在我只是手动使用pdb.set_trace(),但这非常繁琐,因为我需要每次添加它并在结束时将其取出.

例如:

import unittest

class tests(unittest.TestCase):

    def setUp(self):
        pass

    def test_trigger_pdb(self):
        #this is the way I do it now
        try:
            assert 1==0
        except AssertionError:
            import pdb
            pdb.set_trace()

    def test_no_trigger(self):
        #this is the way I would like to do it:
        a=1
        b=2
        assert a==b
        #magically, pdb would start here
        #so that I could inspect the values of a and b

if __name__=='__main__':
    #In the documentation the unittest.TestCase has a debug() method
    #but I don't understand how to use it
    #A=tests() …
Run Code Online (Sandbox Code Playgroud)

python unit-testing pdb python-unittest

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

在unittest中测试之间是否保持变量?

如何在从TestCaseunitttest 继承的同一对象中保留更改?

from unittest import TestCase, main as unittest_main


class TestSimpleFoo(TestCase):
    foo = 'bar'

    def setUp(self):
        pass

    def test_a(self):
        self.assertEqual(self.foo, 'bar')
        self.foo = 'can'

    def test_f(self):
        self.assertEqual(self.foo, 'can')


if __name__ == '__main__':
    unittest_main()
Run Code Online (Sandbox Code Playgroud)

即:我希望上面的两个测试通过

python persistence unit-testing testcase python-unittest

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

如何在python中断言dict包含另一个没有assertDictContainsSubset的字典?

我知道assertDictContainsSubset可以在python 2.7中做到这一点,但由于某种原因它在python 3.2中已被弃用.那么有没有办法断言一个dict包含另一个没有assertDictContainsSubset

这看起来不太好:

for item in dic2:
    self.assertIn(item, dic)
Run Code Online (Sandbox Code Playgroud)

还有其他好方法吗?谢谢

python python-2.7 python-3.x python-unittest

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

Python mock call_args_list解包参数断言的元组

我在处理Mock.call_args_list返回的嵌套元组时遇到了一些麻烦.

def test_foo(self):
    def foo(fn):
        fn('PASS and some other stuff')

    f = Mock()
    foo(f)
    foo(f)
    foo(f)

    for call in f.call_args_list:
        for args in call:
            for arg in args:
                self.assertTrue(arg.startswith('PASS'))
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来解压缩模拟对象上的call_args_list以便进行断言.这个循环有效,但感觉必须有一个更直接的方式.

python unit-testing python-unittest python-unittest.mock

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

如何检查Selenium Python Webdriver中是否选中了复选框?

我正在搜索一周如何检查是否在pylen的selenium webdriver中选中了复选框,但我只找到了来自JAVA的算法.我引用了webdriver文档并且它没有答案.有人有解决方案吗?

python selenium-webdriver python-unittest

36
推荐指数
3
解决办法
4万
查看次数

如何进行覆盖包括未测试的文件?

我刚开始写一些单元测试我一直在使用Python项目unittestcoverage.我目前只测试一小部分,但我正在努力解决代码覆盖问题

我运行我的测试并使用以下内容获得覆盖

python -m unittest discover -s tests/
coverage run -m unittest discover -s tests/
coverage report -m
Run Code Online (Sandbox Code Playgroud)

我遇到的问题coverage是告诉我有44%的代码覆盖率并且只计算以下文件:

  1. 在单元测试中进行了测试(即,所有未测试的文件都丢失了,而不是在整体覆盖范围内)

  2. 在虚拟环境中的库中以及实际测试的代码覆盖率也是如此.当然不应该在结果中包括实际测试?

此外,它说在这些单元测试中实际测试的文件只测试了前几行(在大多数情况下是import语句)

我如何获得更实际的代码覆盖率,或者它是如何实现的?

python unit-testing coverage.py python-unittest

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

如何针对使用matplotlib的代码编写单元测试?

我正在研究一个python(2.7)程序,它产生了很多不同的matplotlib图(数据不是随机的).我愿意实施一些测试(使用unittest)以确保生成的数字是正确的.例如,我将预期的图形(数据或图像)存储在某个地方,我运行我的函数并将结果与​​参考进行比较.有没有办法做到这一点 ?

python matplotlib python-unittest

35
推荐指数
3
解决办法
4765
查看次数

修补类在访问实例属性时会产生"AttributeError:Mock对象没有属性"

问题
使用mock.patchautospec=True修补一类不保存该类的实例的属性.

细节
我试图测试一个类Bar,它将类的实例实例Foo化为一个Bar被调用的对象属性foo.所述Bar被测方法被调用bar; 它调用属于fooFoo实例的方法Bar.在测试中,我在嘲笑Foo,因为我只想测试Bar访问正确的Foo成员:

import unittest
from mock import patch

class Foo(object):
    def __init__(self):
        self.foo = 'foo'

class Bar(object):
    def __init__(self):
        self.foo = Foo()

    def bar(self):
        return self.foo.foo

class TestBar(unittest.TestCase):
    @patch('foo.Foo', autospec=True)
    def test_patched(self, mock_Foo):
        Bar().bar()

    def test_unpatched(self):
        assert Bar().bar() == 'foo'
Run Code Online (Sandbox Code Playgroud)

类和方法工作得很好(test_unpatched通过),但是当我尝试在测试用例(使用nosetests和pytest测试)中使用Foo时autospec=True,遇到"AttributeError:Mock对象没有属性'foo'"

19:39 $ nosetests -sv …
Run Code Online (Sandbox Code Playgroud)

python attributes unit-testing mocking python-unittest

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

在Python中使用unittest进行相对导入

我正在尝试使用Python单元测试和相对导入,我似乎无法弄明白.我知道有很多相关的问题,但到目前为止他们都没有帮助.对不起,如果这是重复的,但我真的很感激任何帮助.我试图使用PEP 328 http://www.python.org/dev/peps/pep-0328/的语法,但我一定有错.

我的目录结构是:

project/
    __init__.py
    main_program.py
    lib/
        __init__.py
        lib_a
        lib_b
    tests/
        __init__.py
        test_a
        test_b
Run Code Online (Sandbox Code Playgroud)

我用以下方法运行测试:

python -m unittest test_module1 test_module2
Run Code Online (Sandbox Code Playgroud)

test_a需要导入lib/lib_a和main_program.这是我试图用于导入的test_a中的代码:

from ..lib import lib_a as lib
from ...project import main_program
Run Code Online (Sandbox Code Playgroud)

都引发了这个错误:

ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)

我的所有init .py文件当前都是空的.

任何具体的建议将不胜感激!!

编辑:

这可能是答案: Python包? 我还在核实这是否有效.

编辑二:

为了澄清,此时我试图以3种不同的方式运行我的测试文件:

project/tests $ python -m unittest test_a
project/tests $ python -m test_a
project/tests $ ./test_a
Run Code Online (Sandbox Code Playgroud)

所有三个都失败并出现与上述相同的错误.当我在项目目录中使用相同的三种语法时,我收到此错误:

ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud)

再次感谢.

python python-import python-unittest

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