Python测试-如何模拟MySQLdb
我试图从我的项目中模拟MySQLdb库,但我真的不明白如何做到这一点: 以下是我的测试代码:Python测试-如何模拟MySQLdb,python,mysql,tdd,nose,Python,Mysql,Tdd,Nose,我试图从我的项目中模拟MySQLdb库,但我真的不明白如何做到这一点: 以下是我的测试代码: import unittest from mock import MagicMock from core.distrib.main.CentralDistDraw import CentralDistDraw from connector.mysql import MySQL class CentralDistDraw(unittest.TestCase): def test_hello(s
import unittest
from mock import MagicMock
from core.distrib.main.CentralDistDraw import CentralDistDraw
from connector.mysql import MySQL
class CentralDistDraw(unittest.TestCase):
def test_hello(self):
draw = CentralDistDraw()
msql = MySQL()
msql.getConnection = MagicMock()
这是我的班级:
from datetime import datetime
import logging
from core.distrib.config.PromoConstants import PromoConstants
from dateutil.parser import parse
from google.appengine.api import memcache
from connector.mysql import MySQL
from core.distrib.ndb.userpromo import UserPromo
from core.distrib.ndb.drawinfo import DrawInfo
import traceback
class CentralDistDraw(object):
def getNextNumber(self, idUser, amountDefault=1, amountSpecial=1):
numbersDelivered = []
# DB CONTROLL....
db = MySQL().getConnection()
db.autocommit(False)
currentUser = None
抛出错误:
ERROR: Failure: ImportError (/home/dyego/Documents/code-stuff/mod/pdbcontest2/src/lib/_mysql.so: invalid ELF header)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/nose-1.3.7-py2.7.egg/nose/loader.py", line 418, in loadTestsFromName
addr.filename, addr.module)
File "/usr/local/lib/python2.7/dist-packages/nose-1.3.7-py2.7.egg/nose/importer.py", line 47, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/usr/local/lib/python2.7/dist-packages/nose-1.3.7-py2.7.egg/nose/importer.py", line 94, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/home/dyego/Documents/code-stuff/mod/pdbcontest2/src/tests/core/test_central_dist_draw.py", line 4, in <module>
from core.distrib.main.CentralDistDraw import CentralDistDraw
File "/home/dyego/Documents/code-stuff/mod/pdbcontest2/src/core/distrib/main/CentralDistDraw.py", line 11, in <module>
from connector.mysql import MySQL
File "/home/dyego/Documents/code-stuff/mod/pdbcontest2/src/connector/mysql.py", line 8, in <module>
import MySQLdb
File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: /home/dyego/Documents/code-stuff/mod/pdbcontest2/src/lib/_mysql.so: invalid ELF header
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
错误:失败:导入错误(/home/dyego/Documents/code-stuff/mod/pdbcontest2/src/lib/_-mysql.so:ELF头无效)
----------------------------------------------------------------------
回溯(最近一次呼叫最后一次):
loadTestsFromName中的文件“/usr/local/lib/python2.7/dist packages/nose-1.3.7-py2.7.egg/nose/loader.py”,第418行
addr.filename,addr.module)
文件“/usr/local/lib/python2.7/dist packages/nose-1.3.7-py2.7.egg/nose/importer.py”,第47行,在importFromPath中
返回self.importFromDir(目录路径,fqname)
importFromDir中的文件“/usr/local/lib/python2.7/dist packages/nose-1.3.7-py2.7.egg/nose/importer.py”,第94行
mod=加载模块(部件名称、fh、文件名、描述)
文件“/home/dyego/Documents/code stuff/mod/pdbcontest2/src/tests/core/test\u central\u dist\u draw.py”,第4行,在
从core.distrib.main.centralistdraw导入centralistdraw
文件“/home/dyego/Documents/code stuff/mod/pdbcontest2/src/core/distrib/main/centralistdraw.py”,第11行,在
从connector.mysql导入mysql
文件“/home/dyego/Documents/code-stuff/mod/pdbcontest2/src/connector/mysql.py”,第8行,在
导入MySQLdb
文件“/usr/lib/python2.7/dist-packages/MySQLdb/_-init__.py”,第19行,在
导入mysql
ImportError:/home/dyego/Documents/code stuff/mod/pdbcontest2/src/lib/_mysql.so:ELF头无效
----------------------------------------------------------------------
在0.001s内运行1次测试
失败(错误=1)
有人知道测试第三方库的正确方法吗
谢谢 实际上,您并没有将模拟注入到被测试的代码中(或者,就此而言,在您的测试中测试任何东西)。谢谢@jornsharpe!但是你能给我演示一下怎么做吗,或者给我链接一个教程?我发现了如何模拟常规方法,但我无法模拟mysql库(或任何其他第三个库),例如,或者您实际上没有将模拟注入测试中的代码(或者,就此而言,在您的测试中测试任何内容)。谢谢@jornsharpe!但是你能给我演示一下怎么做吗,或者给我链接一个教程?我发现了如何模拟常规方法,但我无法模拟mysql库(或任何其他第三个库),例如,或