開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
Head First はじめてのプログラミング ―頭とからだで覚えるPythonプログラミング入門 (Eric Freeman(著)、嶋田 健志(監修)、木下 哲也(翻訳)、株式会社オライリー・ジャパン)を12章(オブジェクト指向プログラミング - オブジェクト村への旅)のエクササイズ(547ページ)の解答を求めてみる。
コード
Python 3
#!/usr/bin/env python3 from unittest import TestCase, main from test.support import captured_stdout class FrisbeeDogTest(TestCase): def setUp(self): self.dog = FrisbeeDog('Name', 10, 20) def tearDown(self): pass def test_bark_none(self): with captured_stdout() as stdout: self.dog.bark() self.assertEqual(stdout.getvalue(), "I can't bark, I have a frisbee in my mouth.\n") def test_bark_frisbee(self): self.dog.frisbee = Frisbee('赤') with captured_stdout() as stdout: self.dog.bark() self.assertEqual(stdout.getvalue(), 'Name says "woof woof"\n') def test_catch(self): self.assertIsNone(self.dog.frisbee) self.dog.catch(Frisbee('赤')) self.assertIsNotNone(self.dog.frisbee) def test_give(self): self.dog.catch(Frisbee('赤')) self.assertIsNotNone(self.dog.frisbee) self.dog.give() self.assertIsNone(self.dog.frisbee) def test_str(self): self.assertEqual(str(self.dog), "I'm a dog named Name") self.dog.catch(Frisbee('赤')) self.assertEqual(str(self.dog), "I'm a dog Name and I have a frisbee") class Dog: def __init__(self, name, age, weight): self.name = name self.age = age self.weight = weight def bark(self): if self.weight > 29: print(f'{self.name} says "WOOF WOOF"') else: print(f'{self.name} says "woof woof"') def __str__(self): return f"I'm a dog named {self.name}" class Frisbee: def __init__(self, color): self.color = color def __str__(self): return f"I'm a {self.color} frisbee" class FrisbeeDog(Dog): def __init__(self, name, age, weight): super().__init__(name, age, weight) self.frisbee = None def bark(self): if self.frisbee is None: print(f"I can't bark, I have a frisbee in my mouth.") else: super().bark() def catch(self, frisbee): self.frisbee = frisbee def give(self): self.frisbee = None def __str__(self): if self.frisbee is None: return super().__str__() return f"I'm a dog {self.name} and I have a frisbee" if __name__ == '__main__': main()
入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))
$ ./sample5.py EEEEE ====================================================================== ERROR: test_bark_frisbee (__main__.FrisbeeDogTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "./sample5.py", line 8, in setUp self.dog = FrisbeeDog('Name', 10, 20) NameError: name 'FrisbeeDog' is not defined ====================================================================== ERROR: test_bark_none (__main__.FrisbeeDogTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "./sample5.py", line 8, in setUp self.dog = FrisbeeDog('Name', 10, 20) NameError: name 'FrisbeeDog' is not defined ====================================================================== ERROR: test_catch (__main__.FrisbeeDogTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "./sample5.py", line 8, in setUp self.dog = FrisbeeDog('Name', 10, 20) NameError: name 'FrisbeeDog' is not defined ====================================================================== ERROR: test_give (__main__.FrisbeeDogTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "./sample5.py", line 8, in setUp self.dog = FrisbeeDog('Name', 10, 20) NameError: name 'FrisbeeDog' is not defined ====================================================================== ERROR: test_str (__main__.FrisbeeDogTest) ---------------------------------------------------------------------- Traceback (most recent call last): File "./sample5.py", line 8, in setUp self.dog = FrisbeeDog('Name', 10, 20) NameError: name 'FrisbeeDog' is not defined ---------------------------------------------------------------------- Ran 5 tests in 0.001s FAILED (errors=5) $ ./sample5.py ..... ---------------------------------------------------------------------- Ran 5 tests in 0.000s OK $
0 コメント:
コメントを投稿