What is it, naokirin?

テスト駆動開発の練習(3) -C#&NUnitでFizzBuzz-

今回もFizzBuzzの実装。

ちなみにタイトル通りC#NUnitを使ってます。

次はPython&py.testのFizzBuzzを実装したコードを載せるつもりですが、その次に別のテーマで書く場合は一テーマにつき一つの言語のコードのみ書いていくことにします。さすがに一テーマにつき4つの言語のテストと実装のコードを載せるのは冗長すぎますね。(なまじ内容が同じでどの言語でもオブジェクト指向で実装しているだけに…)

言語は基本的にローテーションにしようと思います。どうしても「このテーマはこの言語の実装を載せたい!」と思うときだけローテーションの順番を変えるようにすると思います。

using System;

namespace FizzBuzz
{
    public class FizzBuzz
    {
        public int currentNumber{get; set;}

        public FizzBuzz(int startNumber)
        {
            currentNumber = startNumber;
        }

        public String says()
        {
            if (currentNumber % 3 == 0 && currentNumber % 5 == 0)
            {
                return "FizzBuzz";
            }
            else if (currentNumber % 3 == 0)
            {
                return "Fizz";
            }
            else if (currentNumber % 5 == 0)
            {
                return "Buzz";
            }
            else
            {
                return currentNumber.ToString();
            }
        }

        public void increment()
        {
            currentNumber++;
        }

        public void decrement()
        {
            currentNumber--;
        }

    }
}

FizzBuzz.cs


using NUnit.Framework;

namespace FizzBuzz
{
    class FizzBuzzTest
    {
        private FizzBuzz fb;

        [Test]
        public void testNumberIsNotMultipleOfThreeAndFive()
        {
            fb = new FizzBuzz(1);
            Assert.That(fb.says(), Is.EqualTo("1"));
        }
        
        [Test]
        public void testNumberIsMultipleOfThree()
        {

            fb = new FizzBuzz(3);
            Assert.That(fb.says(), Is.EqualTo("Fizz"));
        }

        [Test]
        public void testNumberIsMupltipleOfFive()
        {
            fb = new FizzBuzz(5);
            Assert.That(fb.says(), Is.EqualTo("Buzz"));
        }

        [Test]
        public void testNumberIsMupltipleOfThreeAndFive()
        {
            fb = new FizzBuzz(15);
            Assert.That(fb.says(), Is.EqualTo("FizzBuzz"));
        }

        [Test]
        public void testIncrement()
        {
            fb = new FizzBuzz(1);
            fb.increment();
            Assert.That(fb.says(), Is.EqualTo("2"));
        }

        [Test]
        public void testDecrement()
        {
            fb = new FizzBuzz(2);
            fb.decrement();
            Assert.That(fb.says(), Is.EqualTo("1"));
        }

        [Test]
        public void testSetCurrentNumber()
        {
            fb = new FizzBuzz(1);
            fb.currentNumber = 4;
            Assert.That(fb.says(), Is.EqualTo("4"));
        }

        [Test]
        public void testGetCurrentNumber()
        {
            fb = new FizzBuzz(1);
            Assert.That(fb.currentNumber, Is.EqualTo(1));
        }

    }
}

FizzBuzzTest.cs


次はPython&py.testのコードを載せようと思います。(←これがもっとも触ってない組み合わせなので汚いコードかも)