class FizzBuzzTest(TestCase): def test_returns_number_for_input_not_divisible_by_3_or_5(self): self.fizzbuzz = FizzBuzz() self.assertEqual('1', self.fizzbuzz.convert(1)) self.assertEqual('2', self.fizzbuzz.convert(2)) self.assertEqual('4', self.fizzbuzz.convert(4)) self.assertEqual('7', self.fizzbuzz.convert(7)) self.assertEqual('11', self.fizzbuzz.convert(11)) self.assertEqual('13', self.fizzbuzz.convert(13)) self.assertEqual('14', self.fizzbuzz.convert(14))
class Test_3の倍数の場合(): # クラス名にTest_をつけないと実行されないので注意 def setup_method(self): # 重複してしまうが、全ての入れ子クラスでsetup_method()を呼ぶ必要 self.fizzbuzz = FizzBuzz() def test_3を渡したら文字列Fizzを返す(self): assert self.fizzbuzz.convert(3) == 'Fizz'
class TestFizzBuzz(): def setup_method(self): self.fizzbuzz = FizzBuzz() def test_1を渡したら文字列1を返す(self): assert self.fizzbuzz.convert(1) == '1' def test_2を渡したら文字列2を返す(self): assert self.fizzbuzz.convert(2) == '2' def test_3を渡したら文字列Fizzを返す(self): assert self.fizzbuzz.convert(3) == 'Fizz' def test_5を渡したら文字列Buzzを返す(self): assert self.fizzbuzz.convert(5) == 'Buzz' def test_15を渡したら文字列FizzBuzzを返す(self): assert self.fizzbuzz.convert(15) == 'FizzBuzz'
class FizzBuzzTest(TestCase): def setUp(self): self.fizzbuzz = FizzBuzz() def tearDown(self): self.fizzbuzz = None def test_returns_number_for_input_not_divisible_by_3_or_5(self): self.assertEqual('1', self.fizzbuzz.convert(1)) self.assertEqual('2', self.fizzbuzz.convert(2)) self.assertEqual('4', self.fizzbuzz.convert(4)) self.assertEqual('7', self.fizzbuzz.convert(7)) self.assertEqual('11', self.fizzbuzz.convert(11)) self.assertEqual('13', self.fizzbuzz.convert(13)) self.assertEqual('14', self.fizzbuzz.convert(14)) def test_returns_number_for_input_divisible_by_3(self): fizzbuzz = FizzBuzz() self.assertEqual('Fizz', fizzbuzz.convert(3)) self.assertEqual('Fizz', fizzbuzz.convert(6)) self.assertEqual('Fizz', fizzbuzz.convert(9)) def test_returns_number_for_input_divisible_by_5(self): fizzbuzz = FizzBuzz() self.assertEqual('Buzz', fizzbuzz.convert(5)) self.assertEqual('Buzz', fizzbuzz.convert(10)) self.assertEqual('Buzz', fizzbuzz.convert(20)) def test_returns_number_for_input_divisible_by_3_and_5(self): fizzbuzz = FizzBuzz() self.assertEqual('FizzBuzz', fizzbuzz.convert(15)) self.assertEqual('FizzBuzz', fizzbuzz.convert(30)) self.assertEqual('FizzBuzz', fizzbuzz.convert(45)) def test_number_between_1_and_100(self): fizzbuzz = FizzBuzz() with self.assertRaises(Exception): fizzbuzz.convert(-1) with self.assertRaises(Exception): fizzbuzz.convert(0) with self.assertRaises(Exception): fizzbuzz.convert(101)
class TestFizzBuzz(): # def test_数を文字列にして返す(): # # 関数名にtestする内容を日本語で書くと分かりやすい # # TDDはテストコードから書く # # 数を文字列にして返すって具体的にどういうこと? # # →TODOリストの項目を具体化する必要 def setup_method(self): self.fizzbuzz = FizzBuzz() def test_1を渡したら文字列1を返す(self): # FizzBuzzクラスを作る前には、当然そのようなクラスも.convert()も無いが、 # TDDでは、上記のような期待する処理を先にテストコードに書いて、 # それに対応するように、モジュールにクラスとメソッドを実装していく。 assert '1' == self.fizzbuzz.convert(1) def test_2を渡したら文字列2を返す(self): assert '2' == self.fizzbuzz.convert(2) def test_3を渡したら文字列Fizzを返す(self): assert "Fizz" == self.fizzbuzz.convert(3)
def test_number_between_1_and_100(self): fizzbuzz = FizzBuzz() with self.assertRaises(Exception): fizzbuzz.convert(-1) with self.assertRaises(Exception): fizzbuzz.convert(0) with self.assertRaises(Exception): fizzbuzz.convert(101)
def test_1を渡したら文字列1を返す(): # テストケースで行うことは下記3項目 # (i). 前準備 # (ii). 実行 # (iii). 検証 # →TDD初心者のうちは3から1の順番に実装していく # 1. # 文字列1が返ってると仮定して、"assert == '1'"と書いたところで手が止まる # 2. # assertの左辺にFizzBuzzクラス(?)の数字を文字列に返すメソッドが # 存在すると仮定してassertを書き進める # assert fizzbuzz.convert(1) == '1'と書いて実行 # fizzbuzzなんてものを定義していないので、エラーが発生する # (NameError: name 'fizzbuzz' is not defined) # fizzbuzz.pyにFizzBuzzクラスと「引数とreturn Noneのみ定義した」convertメソッドを作成して、 # test_fizzbuzz.pyにimportする # # 前準備 # fizzbuzz = FizzBuzz() # # 実行 # # 検証 # assert fizzbuzz.convert(1) == '1' # .convert()に何も処理を書いてないので当然落ちる # (AssertionError: assert None == '1') # このテストを通す最小限の実装をする # .convert()の戻り値にreturn str(1)を書く # 前準備 fizzbuzz = FizzBuzz() # 実行 # 検証 assert fizzbuzz.convert(1) == '1'
class Test_その他の場合(): def setup_method(self): self.fizzbuzz = FizzBuzz() def test_1を渡したら文字列1を返す(self): assert self.fizzbuzz.convert(1) == '1'
class Test_3と5の倍数の場合(): def setup_method(self): self.fizzbuzz = FizzBuzz() def test_15を渡したら文字列FizzBuzzを返す(self): assert self.fizzbuzz.convert(15) == 'FizzBuzz'
def test_returns_number_for_input_divisible_by_3_and_5(self): fizzbuzz = FizzBuzz() self.assertEqual('FizzBuzz', fizzbuzz.convert(15)) self.assertEqual('FizzBuzz', fizzbuzz.convert(30)) self.assertEqual('FizzBuzz', fizzbuzz.convert(45))
def test_returns_number_for_input_divisible_by_5(self): fizzbuzz = FizzBuzz() self.assertEqual('Buzz', fizzbuzz.convert(5)) self.assertEqual('Buzz', fizzbuzz.convert(10)) self.assertEqual('Buzz', fizzbuzz.convert(20))
class FizzBuzzTest(TestCase): def setUp(self): self.fizzbuzz = FizzBuzz() def tearDown(self): self.fizzbuzz = None def test_returns_number_for_input_not_divisible_by_3_or_5(self): self.assertEqual('1', self.fizzbuzz.convert(1)) self.assertEqual('2', self.fizzbuzz.convert(2)) self.assertEqual('4', self.fizzbuzz.convert(4)) self.assertEqual('7', self.fizzbuzz.convert(7)) self.assertEqual('11', self.fizzbuzz.convert(11)) self.assertEqual('13', self.fizzbuzz.convert(13)) self.assertEqual('14', self.fizzbuzz.convert(14)) def test_returns_number_for_input_divisible_by_3_not_by_5(self): self.assertEqual('Fizz', self.fizzbuzz.convert(3)) self.assertEqual('Fizz', self.fizzbuzz.convert(6)) self.assertEqual('Fizz', self.fizzbuzz.convert(9)) self.assertEqual('Fizz', self.fizzbuzz.convert(12)) self.assertEqual('Fizz', self.fizzbuzz.convert(18)) def test_returns_number_for_input_divisible_by_5_not_by_3(self): self.assertEqual('Buzz', self.fizzbuzz.convert(5)) self.assertEqual('Buzz', self.fizzbuzz.convert(10)) self.assertEqual('Buzz', self.fizzbuzz.convert(20)) self.assertEqual('Buzz', self.fizzbuzz.convert(25)) self.assertEqual('Buzz', self.fizzbuzz.convert(35)) def test_returns_number_for_input_divisible_by_3_and_5(self): self.assertEqual('FizzBuzz', self.fizzbuzz.convert(15)) self.assertEqual('FizzBuzz', self.fizzbuzz.convert(30)) self.assertEqual('FizzBuzz', self.fizzbuzz.convert(60)) self.assertEqual('FizzBuzz', self.fizzbuzz.convert(120))
def test_output_fizz_when_3_is_input(self): fizzbuzz = FizzBuzz() self.assertEqual('Fizz', fizzbuzz.convert(3))
def test_5を渡したら文字列Buzzを返す(): fizzbuzz = FizzBuzz() assert fizzbuzz.convert(5) == 'Buzz'
def test_3を渡したら文字列Fizzを返す(): fizzbuzz = FizzBuzz() assert fizzbuzz.convert(3) == 'Fizz'
def test_2を渡したら文字列2を返す(): # 前準備 fizzbuzz = FizzBuzz() # 実行 # 検証 assert fizzbuzz.convert(2) == '2'
class FizzBuzzTest(TestCase): def test_returns_number_for_input_not_divisible_by_3_or_5(self): self.fizzbuzz = FizzBuzz() self.assertEqual('1', self.fizzbuzz.convert(1)) self.assertEqual('2', self.fizzbuzz.convert(2)) self.assertEqual('4', self.fizzbuzz.convert(4)) self.assertEqual('7', self.fizzbuzz.convert(7)) self.assertEqual('11', self.fizzbuzz.convert(11)) self.assertEqual('13', self.fizzbuzz.convert(13)) self.assertEqual('14', self.fizzbuzz.convert(14)) def test_returns_number_for_input_divisible_by_3(self): self.fizzbuzz = FizzBuzz() self.assertEqual('3', self.fizzbuzz.convert(3)) self.assertEqual('6', self.fizzbuzz.convert(6)) self.assertEqual('9', self.fizzbuzz.convert(9)) self.assertEqual('12', self.fizzbuzz.convert(12)) def test_returns_number_for_input_divisible_by_5(self): self.fizzbuzz = FizzBuzz() self.assertEqual('5', self.fizzbuzz.convert(5)) self.assertEqual('10', self.fizzbuzz.convert(10)) self.assertEqual('20', self.fizzbuzz.convert(20)) self.assertEqual('25', self.fizzbuzz.convert(25)) def test_returns_number_for_input_divisible_by_3_and_5(self): self.fizzbuzz = FizzBuzz() self.assertEqual('15', self.fizzbuzz.convert(15)) self.assertEqual('30', self.fizzbuzz.convert(30)) self.assertEqual('45', self.fizzbuzz.convert(45)) self.assertEqual('60', self.fizzbuzz.convert(60))
def test_returns_number_for_input_divisible_by_3(self): fizzbuzz = FizzBuzz() self.assertEqual('Fizz', fizzbuzz.convert(3)) self.assertEqual('Fizz', fizzbuzz.convert(6)) self.assertEqual('Fizz', fizzbuzz.convert(9))