我有一个包含我的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) 我想了解如何@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 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) 我在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 框架setUp()和之间的区别是什么?为什么设置要用一种方法处理另一种方法?setUpClass()unittest
我想了解在setUp()和setUpClass()函数中完成哪些部分设置,以及使用tearDown()和tearDownClass().
我有一个测试文件,其中包含花费大量时间的测试(它们将计算发送到集群并等待结果).所有这些都在特定的TestCase类中.
由于它们需要时间而且不太可能破坏,我希望能够选择这个测试子集是否运行(最好的方式是使用命令行参数,即" ./tests.py --offline"或者某种东西那样的话,所以当我有时间的时候,我可以经常快速地运行大部分测试,并且整个设置会在一段时间内完成.
现在,我只是unittest.main()用来开始测试.
谢谢.
使用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
我有一个python文件a.py,其中包含两个类A和B.
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 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 ×10
python-unittest ×10
unit-testing ×6
python-2.7 ×2
assertions ×1
django ×1
flask ×1
json ×1
magicmock ×1
python-3.x ×1
python-mock ×1
testing ×1