小编Yep*_*_Me的帖子

在单元测试中抑制打印输出

编辑:请注意我正在使用Python 2.6(标记为)

说我有以下内容:

class Foo:
    def bar(self):
        print 'bar'
        return 7
Run Code Online (Sandbox Code Playgroud)

并说我有以下单元测试:

import unittest
class ut_Foo(unittest.TestCase):
    def test_bar(self):
        obj = Foo()
        res = obj.bar()
        self.assertEqual(res, 7)
Run Code Online (Sandbox Code Playgroud)

所以如果我跑:

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

我明白了:

bar # <-- I don't want this, but I *do* want the rest
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK
Exit code:  False
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法抑制被测对象的输出,同时仍然得到unittest框架的输出?

编辑 此问题不是标记问题的副本,该问题询问是否在正常python脚本中对特定函数的stdout进行静默.

虽然这个问题是在运行它的单元测试时询问是否隐藏了python脚本的正常标准输出.我仍然希望显示unittest标准输出,我不想禁用我测试过的脚本的标准输出.

python python-2.6 python-unittest

17
推荐指数
2
解决办法
8037
查看次数

断言整数在范围内

我正在python中编写一些单元测试,测试是否收到整数.然而,有时这个整数可以关闭1或2,我真的不在乎.基本上我希望能够断言收到的整数在一定范围内,如:

self.assertBetween(998, 1000, my_integer)
Run Code Online (Sandbox Code Playgroud)

这是否有可接受的方式?或者我必须做这样的事情:

self.assertTrue(998 <= my_integer)
self.assertTrue(my_integer <= 1000)
Run Code Online (Sandbox Code Playgroud)

编辑 到目前为止的答案建议:

self.assertTrue(998 <= my_integer <= 1000)
Run Code Online (Sandbox Code Playgroud)

在我的2个断言的例子中,这有什么好处吗?

python unit-testing python-2.7 python-unittest

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

PyPI索引与简单索引

我已经看到提及indexsimple indexPyPI相关的一个和一个例子在devpi文档中.两个指数之间有什么区别吗?它们是相同的还是具有不同的访问控制或功能?

python pypi

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

在运行测试之前更改 cwd

我在不同的目录中有一堆unittest测试用例。还有一个目录仅包含测试的帮助程序脚本。所以我的文件树看起来像这样

test_dir1
test_dir2
test_dir3
helper_scripts
Run Code Online (Sandbox Code Playgroud)

每个 python 文件test_dir*都会有这些行:

import sys
sys.path.append('../helper_scripts')
import helper_script
Run Code Online (Sandbox Code Playgroud)

只要我从他们的目录中运行测试,这一切都可以正常工作。但是,我想在项目根目录下运行:

py.test
Run Code Online (Sandbox Code Playgroud)

并让它遍历所有目录并运行它找到的每个测试。问题是测试是从错误的目录运行的,因此不会sys.path.append附加helper_scripts目录,而是附加项目根目录的父目录。这使得所有导入失败并带有Import Error.

有没有办法告诉py.test从他们的目录运行测试脚本?IE。在执行它们之前更改cwd?如果没有,我可以使用另一个测试运行程序吗?

python unit-testing pytest python-2.7

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

如果 __init__ 只调用 super.__init__ 是否有必要?

我正在对类进行子threading.Thread类化,它目前看起来像这样:

class MyThread(threading.Thread):
    def __init__(self:
        super(MyThread, self).__init__()

    def run(self):
        # Do some stuff
Run Code Online (Sandbox Code Playgroud)

__init__在这种情况下是必需的吗?如果我省略它,它会自动调用吗?

python oop inheritance python-multithreading python-2.7

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

具有多个返回值的模拟/补丁 os.path.exists

我正在尝试测试我创建的一个函数,该函数遍历列表并调用列表os.path.exists中的每个项目。我的测试是向函数传递 2 个对象的列表。我需要os.path.exists返回True的其中之一,并False为其他。我试过这个:

import mock
import os
import unittest

class TestClass(unittest.TestCase):
    values = {1 : True, 2 : False}
    def side_effect(arg):
        return values[arg]

    def testFunction(self):
        with mock.patch('os.path.exists') as m:
            m.return_value = side_effect # 1
            m.side_effect = side_effect # 2

            arglist = [1, 2]
            ret = test(argList)
Run Code Online (Sandbox Code Playgroud)

使用第 1 行和第 2 行中的任何一个但不是同时使用 NameError: global name 'side_effect' is not defined

我发现了这个问题并像这样修改了我的代码:

import mock
import os

class TestClass(unittest.TestCase):
    values = {1 : True, …
Run Code Online (Sandbox Code Playgroud)

python mocking python-2.7 python-unittest

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

在Scala中,n个数字结果的总和是错误的

我正在从文本文件中读取逗号分隔的数字,并在文件中执行所有数字的添加 - 但我得到的总和是错误的.

输入文件

1,2,3
Run Code Online (Sandbox Code Playgroud)

源代码

val file=Source.fromFile("D:/scala/test.txt")
 val f1=file.foldLeft(0)((a,b)=>a+b)
 println(f1)
Run Code Online (Sandbox Code Playgroud)

产量

238
Run Code Online (Sandbox Code Playgroud)

我可以在数组上执行添加并且它工作正常,但是从文件中读取数据时我无法得到正确的答案.

scala

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