NUnitでテスト
Booではカスタム属性をサポートしているので、他の言語同様にNUnitを使えます。例えば、次のようなクラスがあったとします。
ファイル:calc.boo
namespace Calc import System import System.Collections enum MemOpe: None Add Subtract class Calc: mem = 0 mop = MemOpe.None private def Mem(x as int) as int: if mop == MemOpe.Add: mem += x elif mop == MemOpe.Subtract: mem -= x mop = MemOpe.None return x def CM(): mem = 0 def RM() as int: return mem def MP(): mop = MemOpe.Add def MM(): mop = MemOpe.Subtract def Add(x as int, y as int) as int: return Mem(x + y) def Subtract(x as int, y as int) as int: return Mem(x - y) def Multiply(x as int, y as int) as int: return Mem(x * y) def Divide(x as int, y as int) as int: raise DivideByZeroException() if y == 0 return Mem(x / y)
これに対するテストケースを書いてみます。
ファイル:test.boo
import System import NUnit.Framework import Calc [TestFixture] class CalcTestCase: _calc as Calc [SetUp] def SetUp(): _calc = Calc() [Test] def Add(): ret = _calc.Add(68, 17) Assert.AreEqual(ret, 85) [Test] def Subtract(): ret = _calc.Subtract(91, 23) Assert.AreEqual(ret, 68) [Test] def Multiply(): ret = _calc.Multiply(25, 5) Assert.AreEqual(ret, 125) [Test] def Divide(): ret = _calc.Divide(84, 3) Assert.AreEqual(ret, 28) [Test] [ExpectedException(typeof(DivideByZeroException))] def DivideByZero(): _calc.Divide(1, 0) [Test] def MP(): _calc.CM() _calc.MP() _calc.Add(5, 3) ret = _calc.RM() Assert.AreEqual(ret, 8) [Test] def MM(): _calc.CM() _calc.MM() _calc.Subtract(5, 3) ret = _calc.RM() Assert.AreEqual(ret, -2) [Test] def CM(): _calc.MP() _calc.Add(1, 2) _calc.CM() ret = _calc.RM() Assert.AreEqual(ret, 0)
C#と同じですね。.NET対応言語の場合、新しい言語でも.NETライブラリがそのまま使えるのが嬉しいですよね。