标签: python-unittest

如何在目录中运行所有Python单元测试?

我有一个包含我的Python单元测试的目录.每个单元测试模块的形式为test _*.py.我正在尝试创建一个名为all_test.py的文件,您猜对了,运行上述测试表单中的所有文件并返回结果.到目前为止,我尝试了两种方法; 都失败了.我将展示这两种方法,我希望那里的人知道如何正确地做到这一点.

对于我的第一次勇敢的尝试,我想"如果我只是在文件中导入我的所有测试模块,然后调用这个unittest.main()doodad,它会工作,对吧?" 好吧,事实证明我错了.

import glob
import unittest

testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]

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

这不起作用,我得到的结果是:

$ python all_test.py 

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

对于我的第二次尝试,我可以,也许我会尝试以更"手动"的方式完成整个测试.所以我试着在下面这样做:

import glob
import unittest

testSuite = unittest.TestSuite()
test_file_strings = glob.glob('test_*.py')
module_strings = [str[0:len(str)-3] for str in test_file_strings]
[__import__(str) for str in module_strings]
suites = [unittest.TestLoader().loadTestsFromName(str) for str in module_strings]
[testSuite.addTest(suite) for suite in suites]
print …
Run Code Online (Sandbox Code Playgroud)

python testing unit-testing python-unittest

268
推荐指数
10
解决办法
18万
查看次数

暂时禁用单个Python单元测试

unittest在Python中使用模块时,如何暂时禁用单个单元测试?

python python-unittest

111
推荐指数
5
解决办法
4万
查看次数

Python从导入的模块中模拟一个函数

我想了解如何@patch从导入的模块中获取函数.

这是我到目前为止的地方.

应用程序/ mocking.py:

from app.my_module import get_user_name

def test_method():
  return get_user_name()

if __name__ == "__main__":
  print "Starting Program..."
  test_method()
Run Code Online (Sandbox Code Playgroud)

应用程序/ my_module/__ init__.py:

def get_user_name():
  return "Unmocked User"
Run Code Online (Sandbox Code Playgroud)

测试/ mock-test.py:

import unittest
from app.mocking import test_method 

def mock_get_user():
  return "Mocked This Silly"

@patch('app.my_module.get_user_name')
class MockingTestTestCase(unittest.TestCase):

  def test_mock_stubs(self, mock_method):
    mock_method.return_value = 'Mocked This Silly')
    ret = test_method()
    self.assertEqual(ret, 'Mocked This Silly')

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

这并没有工作,我期望的那样."patched"模块只返回unmocked值get_user_name.如何从我导入到测试命名空间的其他包中模拟方法?

python unit-testing python-mock python-unittest

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

AttributeError:'module'对象没有属性'tests'

我正在运行此命令:

python manage.py test project.apps.app1.tests
Run Code Online (Sandbox Code Playgroud)

它会导致此错误:

AttributeError:'module'对象没有属性'tests'

下面是我的目录结构.我还在我安装的应用配置中添加了app1.

Traceback (most recent call last):
    File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 50, in run_from_argv
    super(Command, self).run_from_argv(argv)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 71, in execute
    super(Command, self).execute(*args, **options)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 88, in handle
    failures = test_runner.run_tests(test_labels)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", …
Run Code Online (Sandbox Code Playgroud)

python django python-2.7 python-unittest

95
推荐指数
5
解决办法
9万
查看次数

如何在单元测试中使用JSON发送请求

我在Flask应用程序中有代码,在请求中使用JSON,我可以像这样得到JSON对象:

Request = request.get_json()
Run Code Online (Sandbox Code Playgroud)

这一直很好,但我正在尝试使用Python的unittest模块创建单元测试,而我很难找到一种方法来发送带有请求的JSON.

response=self.app.post('/test_function', 
                       data=json.dumps(dict(foo = 'bar')))
Run Code Online (Sandbox Code Playgroud)

这给了我:

>>> request.get_data()
'{"foo": "bar"}'
>>> request.get_json()
None
Run Code Online (Sandbox Code Playgroud)

Flask似乎有一个JSON参数,您可以在post请求中设置json = dict(foo ='bar'),但我不知道如何使用unittest模块.

python json flask python-unittest

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

Python unittest中setUp()和setUpClass()有什么区别?

Python 框架setUp()和之间的区别是什么?为什么设置要用一种方法处理另一种方法?setUpClass()unittest

我想了解在setUp()setUpClass()函数中完成哪些部分设置,以及使用tearDown()tearDownClass().

python unit-testing python-unittest

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

Python unittest:如何只运行部分测试文件?

我有一个测试文件,其中包含花费大量时间的测试(它们将计算发送到集群并等待结果).所有这些都在特定的TestCase类中.

由于它们需要时间而且不太可能破坏,我希望能够选择这个测试子集是否运行(最好的方式是使用命令行参数,即" ./tests.py --offline"或者某种东西那样的话,所以当我有时间的时候,我可以经常快速地运行大部分测试,并且整个设置会在一段时间内完成.

现在,我只是unittest.main()用来开始测试.

谢谢.

python unit-testing python-unittest

69
推荐指数
7
解决办法
4万
查看次数

如何测试Python 3.4 asyncio代码?

使用Python 3.4 asyncio库编写代码单元测试的最佳方法是什么?假设我想测试TCP客户端(SocketConnection):

import asyncio
import unittest

class TestSocketConnection(unittest.TestCase):
    def setUp(self):
        self.mock_server = MockServer("localhost", 1337)
        self.socket_connection = SocketConnection("localhost", 1337)

    @asyncio.coroutine
    def test_sends_handshake_after_connect(self):
        yield from self.socket_connection.connect()
        self.assertTrue(self.mock_server.received_handshake())
Run Code Online (Sandbox Code Playgroud)

当使用默认测试运行器运行此测试用例时,测试将始终成功,因为该方法仅执行到第一yield from条指令,之后它在执行任何断言之前返回.这导致测试总是成功.

是否有预先构建的测试运行器能够处理这样的异步代码?

python unit-testing python-3.x python-unittest python-asyncio

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

Python返回MagicMock对象而不是return_value

我有一个python文件a.py,其中包含两个类AB.

class A(object):
    def method_a(self):
        return "Class A method a"

class B(object):
    def method_b(self):
        a = A()
        print a.method_a()
Run Code Online (Sandbox Code Playgroud)

我想通过嘲笑method_b在课堂上B进行单元测试A.以下是testa.py用于此目的的文件内容:

import unittest
import mock
import a


class TestB(unittest.TestCase):

    @mock.patch('a.A')
    def test_method_b(self, mock_a):
        mock_a.method_a.return_value = 'Mocked A'
        b = a.B()
        b.method_b()


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

我希望得到Mocked A输出.但我得到的是:

<MagicMock name='A().method_a()' id='4326621392'>
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

python python-unittest magicmock

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

如果iterable不为空,有没有办法检查Python unittest断言?

在向服务提交查询后,我得到一个字典/列表,我想确保它不是空的.我在Python 2.7上.

我很惊讶我没有看到类实例的任何assertEmpty方法unittest.TestCase.

现有的替代品如:

self.assertTrue(bool(d))
Run Code Online (Sandbox Code Playgroud)

self.assertNotEqual(d,{})
Run Code Online (Sandbox Code Playgroud)

self.assertGreater(len(d),0)
Run Code Online (Sandbox Code Playgroud)

只是看起来不对劲.

Python unittest框架中是否缺少这种方法?如果是,那么断言迭代不为空的最pythonic方法是什么?

python unit-testing assertions python-2.7 python-unittest

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