4

这是一个简化我所拥有的示例类:

类.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

类测试.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来电getDictionary。有没有办法告诉test_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

以下是您可以使用它的方法:

类测试.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 回答