Pythonのユニットテストとモック
class Language: def getName(self): return 'Java' class Person: def __init__(self): self.language = Language() def getLanguage(self): self.language.getName()
Language.getNameはJavaという文字列を返すだけ、Person.getLanguageはLanguage.getNameに委譲をかけてるだけ。
class PersonTest(unittest.TestCase): def setUp(self): self.person = Person() def testGetLanguage(self): self.assertEqual('Java', self.person.getLanguage()) if __name__ == '__main__': unittest.main()
実行すれば、当然のごとくOK。
じゃ、テストコードをちょっと変えてみると・・・
class PersonTest(unittest.TestCase): def setUp(self): self.person = Person() def testGetLanguage(self): def getName(self): return 'Python' #Language.getNameの実装を上のgetNameに置き換えてる Language.getName = getName self.assertEqual('Python', self.person.getLanguage()) if __name__ == '__main__': unittest.main()
とこんなことができて、モックライブラリとかいるの?見たいな状況に・・・