[41]:
import sys
!{sys.executable} -m pip install iplantuml
import iplantuml
Requirement already satisfied: iplantuml in /usr/local/lib/python3.7/site-packages (0.1.1)
Requirement already satisfied: plantweb in /usr/local/lib/python3.7/site-packages (from iplantuml) (1.1.0)
Requirement already satisfied: requests in /usr/local/lib/python3.7/site-packages (from plantweb->iplantuml) (2.19.1)
Requirement already satisfied: six in /usr/local/lib/python3.7/site-packages (from plantweb->iplantuml) (1.11.0)
Requirement already satisfied: docutils in /usr/local/lib/python3.7/site-packages (from plantweb->iplantuml) (0.14)
Requirement already satisfied: idna<2.8,>=2.5 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (2.7)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (1.23)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (2018.8.13)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.7/site-packages (from requests->plantweb->iplantuml) (3.0.4)

4. PythonでTDD

4.1. 仕様

1 から 100 までの数をプリントするプログラムを書け。

ただし 3 の倍数のときは数の代わりに「Fizz」と、

5 の倍数のときは「Buzz」とプリントし、

3 と 5 両方の倍数の場合には「FizzBuzz」とプリントすること。

4.2. 設計

4.2.1. ユースケース図

[42]:
%%plantuml --jar

@startuml
left to right direction
skinparam packageStyle rectangle
actor User
rectangle FizzBuzz {
  User -- (Put Value)
}
@enduml
[42]:
../_images/sample_tdd_4_0.svg

4.2.2. クラス図

[43]:
%%plantuml --jar

@startuml
class FizzBuzz {
+ {static}generate(number)
+ iterate(count)
}

@enduml
[43]:
../_images/sample_tdd_6_0.svg

4.2.3. シーケンス図

[44]:
%%plantuml --jar

@startuml
actor User

User -> FizzBuzz: iterate
loop for each iterate
      activate FizzBuzz
      FizzBuzz -> FizzBuzz: generate
            User <- FizzBuzz
      deactivate FizzBuzz
end
@enduml
[44]:
../_images/sample_tdd_8_0.svg

4.2.4. TODO リスト

  • 1 から 100 まで数をプリントできるようにする。

  • 3 の倍数のときは数の代わりに「Fizz」をプリントできるようにする。

  • 5 の倍数のときは「Buzz」とプリントできるようにする。

  • 3 と 5 両方の倍数の場合には「FizzBuzz」とプリントできるようにする。

4.3. 開発

[45]:
import unittest

def fizz_buzz(number):
    return 'Fizz'

class FizzBuzzTest(unittest.TestCase):
    def test3の倍数のときはFizzを出す(self):
        self.assertEqual(fizz_buzz(3),'Fizz')


unittest.main(argv=['first-arg-is-ignored'],exit=False)
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
[45]:
<unittest.main.TestProgram at 0x10b3e3590>