私は単体テストを書いていますが、ほとんどの場合、引数が特別な値「挿入」を取得する場合を除いて、メソッド自体として動作するようにメソッド呼び出しをモックする必要があります。簡略化された製品コードは次のとおりです。
class CommandServer(object):
def __init__(self):
self.rowcount = None
def runSQL(self, sql):
print "Do something useful"
self.rowcount=5
return self
class Process(object):
def process(self):
cs = CommandServer()
cs.runSQL("create table tbl1(X VARCHAR2(10))")
r = cs.runSQL("insert into tbl1 select * from tbl2")
print "Number of rows: %s" % r.rowcount
p = Process()
p.process()
印刷する
Do something useful
Do something useful
Number of rows: 5
次のコードを使用して、自分でモック バージョンを作成できます。
runSQL = CommandServer.runSQL
def runSQLPatch(self, sql):
if sql.lstrip().startswith('insert into'):
print "Patched version in use"
class res(object):
rowcount = -1
return res
else:
return runSQL(self, sql)
CommandServer.runSQL = runSQLPatch
p = Process()
p.process()
印刷する
Do something useful
Patched version in use
Number of rows: -1
mock
ライブラリを使用して同じことを達成したい(これはpython 3に含まれるライブラリだと思います)。どうやってやるの?(パイソン 2.6.2)