我目前正在为Python中的sqlite3包装器编写测试覆盖.目前我的代码看起来像这样:
import unittest
from unittest.mock import patch
from MemberDatabase import MemberDatabase
@patch('sqlite3.connect')
class MemberDatabaseTestCase(unittest.TestCase):
def test_dbConnect(self, mocksql_connect):
mdb = MemberDatabase('test.db')
mocksql_connect.assert_called_with('test.db')
def test_optionalCommit(self, mocksql_connect):
mdb = MemberDatabase('test.db')
mdb.optionalCommit()
self.assertTrue(mocksql_connect().commit.called)
Run Code Online (Sandbox Code Playgroud)
其他各种测试都mdb以相同的方式创建.MemberDatabase调用的构造函数sqlite3.connect().我想通过移动的分配整理测试用例了mdb到setUp().但是,sqlite3.connect()不会被setUp()模拟,因此这会导致实际sqlite3.connect()调用并创建真正的数据库连接.
有没有办法用打补丁sqlite3.connect()的setUp()?也许我需要在内部创建模拟setUp()而不是使用装饰器,但我认为使用装饰器方法的代码更清晰.另外,我读过如果我创建模拟
我刚刚发现了令人愉快的 ES6 列表解构语法,即
ls = [1, 2, 3]
[first, ...rest] = ls
Run Code Online (Sandbox Code Playgroud)
这台first以1及rest对[2,3]。但是,是否可以将列表拆分为rest=[1,2]并last=3使用类似的语法?
我没有任何运气谷歌搜索它。我对这样的语法尝试了一些明显的猜测(见下文),但它们都产生了语法错误。
[rest..., last] = ls
[...rest, last] = ls
Run Code Online (Sandbox Code Playgroud)
我想我可以通过两次反转列表来做到这一点,所以我的问题的另一种解决方案是恒定时间列表反转功能。
我有一个 DataFrame,其中一列将列表作为条目。对于给定的给定值,x我想得到一个 pd.Series 布尔值,告诉我是否x在每个列表中。例如,给定 DataFrame
index lists
0 []
1 [1, 2]
2 [1]
3 [3, 4]
Run Code Online (Sandbox Code Playgroud)
我想做类似的事情df.lists.contains(1)然后回来False, True, True, False。
我知道我可以用一个Python循环或理解这样做,但我非常喜欢熊猫的解决方案类似df.mod,df.isin等等。
python ×2
arrays ×1
ecmascript-6 ×1
javascript ×1
mocking ×1
pandas ×1
patch ×1
unit-testing ×1