Как указать возвращаемое значение по умолчанию методу, который вызывается во время модульного теста? – Python

Вот пример класса, который упрощает то, что у меня есть:

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 вызывает getDictionary . Есть ли способ сообщить test_CheckConfiguration(self) что если getDictionary вызывается, он должен автоматически возвращать словарь, который я могу ввести? Что-то вроде:

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

Я знаю, что это возможно на Java, хотя у меня недостаточно опыта и в этом. Спасибо.

Я думаю, вам нужна насмешливая структура. Я предлагаю 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() 

https://groups.google.com/forum/?fromgroups#!topic/comp.lang.python/WBhc1xAc8Hw предлагает подклассу тестируемого класса и переопределение __getattribute__ для записи каждого вызова любым способом. Не уверен, что еще будет работать …