标签: python-unittest

如果它们在姐妹文件夹中,如何使我的Python单元测试导入测试模块?

我仍然围绕import声明.如果我在同一级别有2个文件夹:

  1. SRC
  2. 测试

如何pytest导入模块的文件中src?有没有更好的解决方案(比如将文件夹放在另一个文件夹中?)

python directory import code-organization python-unittest

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

如果SetUpClass中的某些条件失败,则跳过unittest

我正在玩pyUnit我的应用程序的单元测试框架.如果setUpClass中的某些条件失败,有没有办法跳过课堂上的所有测试?

目前,我正在setUpClass中设置环境(创建资源,配置全局设置).但是,如果这些资源创建中的任何一个失败了......我正在提出异常.而不是我想跳过整个测试套件.

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

16
推荐指数
2
解决办法
6995
查看次数

Python的unittest和unittest2模块有什么区别?

我目前正在研究一些使用unittest2模块的代码.我怀疑这段代码是用于python2的.可以使用python3 unittest作为unittest2的替代品吗?两者有什么区别?

compatibility python-module python-2.x python-3.x python-unittest

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

numpy测试断言数组不相等

我们必须numpy.testing.assert_array_equal断言两个数组相等.

但是,最好的方法是做什么numpy.testing.assert_array_not_equal,即确保两个数组不相等?

python numpy python-unittest

16
推荐指数
3
解决办法
4810
查看次数

使用python3并且没有__init__.py文件进行递归unittest发现

我有以下目录结构的项目:

.
??? requirements.txt
??? main.py
??? tests
    ??? unit
    ?   ??? test_thing1.py
    ?   ??? test_thing2.py
    ??? integration
        ??? test_integration_thing1.py
        ??? test_integration_thing2.py
Run Code Online (Sandbox Code Playgroud)

我想用一个命令运行所有测试.如果我这样做python -m unittest discover,就不会执行任何测试.

我发现这个问题建议添加一个__init__.py文件来制作包unitintegration文件夹.解决方案有效,所有测试都以这种方式运行.

但是因为我使用python3并且隐式命名空间包__init__.py不需要文件,所以我想知道是否有一种方法可以在没有这些文件的情况下使其工作.__init__.py

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

16
推荐指数
2
解决办法
868
查看次数

pytest 中实际和预期的正确顺序是什么?

这个问题给出了 order assertEqual(expected, actual),尽管是 unittest 包。

但是 Pycharm 和 pytest 会根据 order 打印出“Expected:...”和“Actual...” actual==expected

这令人困惑。pytest 的正确顺序是什么?源代码和在线文档就不说了。

(我还注意到 JUnit 和 TestNG 不同意这一点。)

python pytest python-unittest

16
推荐指数
2
解决办法
4154
查看次数

如何在单元测试中使用pandas数据帧

我正在开发一组python脚本来预处理数据集,然后使用scikit-learn生成一系列机器学习模型.我想开发一组单元测试来检查数据预处理函数,并希望能够使用一个小的测试pandas数据帧,我可以为其确定答案并在断言语句中使用它.

我似乎无法加载数据帧并使用self将其传递给单元测试.我的代码看起来像这样;

def setUp(self):
    TEST_INPUT_DIR = 'data/'
    test_file_name =  'testdata.csv'
    try:
        data = pd.read_csv(INPUT_DIR + test_file_name,
            sep = ',',
            header = 0)
    except IOError:
        print 'cannot open file'
    self.fixture = data

def tearDown(self):
    del self.fixture

def test1(self):    
    self.assertEqual(somefunction(self.fixture), somevalue)

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

谢谢您的帮助.

python pandas python-unittest

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

检测不正确的断言方法

在最近的一次代码审查中,我偶然发现了一个不容易发现的问题 - assertTrue()使用而不是assertEqual()基本上导致了一个没有测试的测试.这是一个简化的例子:

from unittest import TestCase


class MyTestCase(TestCase):
    def test_two_things_equal(self):
        self.assertTrue("a", "b")
Run Code Online (Sandbox Code Playgroud)

这里的问题是测试会通过; 从技术上讲,代码是有效的,因为assertTrue有这个可选msg参数("b"在这种情况下获取值).

我们能不能依靠审核代码的人来发现这类问题?是否有办法来自动检测使用静态代码分析它flake8还是pylint

python testing unit-testing static-code-analysis python-unittest

15
推荐指数
2
解决办法
321
查看次数

Django升级后单元测试失败

我试图将Django项目从1.8版带到1.11版.除了单元测试之外,几乎所有东西看起来都很好.我们有一个基础测试类继承自Django TestCase和Tastypie mixin.基类在setUp()中有一些代码

class BaseApiTest(ResourceTestCaseMixin, django.test.TestCase):
    def setUp(self):
        super().setUp()
        self.username = "secret_user"
        self.password = "sekret"
        self.email = "secret@mail.com"
        self.first_name = "FirstName"
        self.last_name = "LastName"
        self.user = User.objects.create_superuser(
            self.username,
            self.username,
            self.password
        )
Run Code Online (Sandbox Code Playgroud)

应用程序特定的测试将继承基本测试并执行类似的操作

class TheAPITest(BaseApiTest):
    def setUp(self):
        super().setUp()
        # more setup goes here
Run Code Online (Sandbox Code Playgroud)

所以,在Django 1.8.x下,这很好用.但是在1.11.x下,所有这些都给我一个错误User.objects.create_superuser() line.

django.db.utils.InterfaceError: connection already closed

我一直在阅读发行说明,但是在1.8和1.11之间发生了太多的事情.我缺少一些简单的东西吗?

python django django-unittest tastypie python-unittest

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

为什么我的Python模拟补丁以错误的顺序出现?

我有一个模块test.py,它使用键盘导入*从另一个模块keyboard.py导入函数.

在keyboard.py里面有两个功能:

def get_keys(keyList, timeStamped):
    return event.getKeys(keyList=keyList, timeStamped=timeStamped)

def wait_keys(keyList, timeStamped):
    return event.waitKeys(keyList=keyList, timeStamped=timeStamped)
Run Code Online (Sandbox Code Playgroud)

现在,我在test.py中的测试函数如下所示:

@mock.patch('keyboard.wait_keys')
@mock.patch('keyboard.get_keys')
def test_2(self, mock_waitKeys, mock_getKeys):

    mock_waitKeys.return_value = [['wait_keys!', 0.1]]
    mock_getKeys.return_value = [['get_keys!',0.1]]

    run_blocks(trials,noise,win,expInfo, incorrect, tone1, tone2, experiment_details,allPoints,32,60)            
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试将两个模拟返回值放在适当的位置.

然而,他们的影响似乎是倒置的!

当我在交互式控制台中调用它们而在断点处停止时(或在正常调用时检查值),两个模拟函数返回彼此的假返回值!

从控制台:

get_keys()
Out[2]: [['wait_keys!', 0.1]]
wait_keys()
Out[3]: [['get_keys!', 0.1]]
Run Code Online (Sandbox Code Playgroud)

我是否误解了传递给测试函数的模拟参数的顺序?

这可能与修补keyboard.get_keys而不是test.get_keys有关吗?

谢谢!路易丝

python mocking python-mock python-unittest

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