4

私が持っているものを簡素化するクラスの例を次に示します。

class.py

class MyClass(object):

    @staticmethod
    def getDictionary():
        #some calculations, returns a dictionary 

    def checkConfiguration(self):
        #some code
        self.getDictionary()
        #some other code
        return value

そして今、私は単体テストを作成していますcheckConfiguration:

classTest.py

import class
import unittest

class TestMyClass(unittest.TestCase):

    def setUp(self):
        self.classTest = class.MyClass() 

    def test_CheckConfiguration(self):
        #What to put here?

元のCheckConfiguration呼び出しgetDictionarytest_CheckConfiguration(self)が呼び出された場合getDictionary、入力できる辞書を自動的に返す必要があることを伝える方法はありますか? 何かのようなもの:

    def test_CheckConfiguration(self):
        if method getDictionary is called: 
            return {'a':123, 'b':22}
        checkValue = self.classTest.checkConfiguration()

私はJavaでこれが可能であることを知っていますが、それもこれも十分な経験がありません。ありがとうございました。

4

2 に答える 2

2

モックフレームワークが必要だと思います。PyMockをお勧めします。

使用方法は次のとおりです。

classTest.py

import class
import pymock
import unittest

class TestMyClass(pymock.PyMockTestCase):

    def setUp(self):
        self.classTest = class.MyClass() 

    def test_CheckConfiguration(self):
        self.override(self.classTest, 'getDictionary')
        pymock.expectAndReturn(self.classTest.getDictionary(), {'a':123, 'b':22})
        self.replay()
        checkValue = self.classTest.checkConfiguration()
        self.verify()
于 2012-07-24T22:34:19.170 に答える
1

https://groups.google.com/forum/?fromgroups#!topic/comp.lang.python/WBhc1xAc8Hwは、テスト中のクラスをサブクラス化し、オーバーライド__getattribute__して、必要な方法で各呼び出しを記録することを提案しています。他に何が機能するかわからない...

于 2012-07-24T22:36:45.760 に答える