dartlang.org/ class TestRunner{Function _setUp;set setUp(Function func)=>_setUp=func;Function _tearDown;set tearDown(Function func)=>_tearDown=func;Map<String,Function> tests;TestRunner(){_setUp=null;_tearDown=null;tests=new LinkedHashMap<String,Function>();}add(message,test)=>tests[message]=test;run()=>((){var cnt=0;var failures=0;var errors=0;tests.forEach((message,test){cnt++;try{if(_setUp!=null)_setUp();test();print('${message} : Green!');}catch(ExpectException e){print('${message} : Red!');print(' ${e}');failures++;}catch(Exception e){print('${message} : Error!');print(' ${e}');errors++;}finally{if(_tearDown!=null)_tearDown();}});print('Tests run: ${cnt}, Failures: ${failures}, Errors: ${errors}');})();} main() { var runner = new TestRunner(); var fizzBuzz; runner.setUp = () => fizzBuzz = new FizzBuzz(); runner.add('speak number by 1', () => Expect.equals('1', fizzBuzz.speak(1))); runner.add('speak number by 2', () => Expect.equals('2', fizzBuzz.speak(2))); runner.add('speak Fizz by 3', () => Expect.equals('Fizz', fizzBuzz.speak(3))); runner.add('speak Fizz by 6', () => Expect.equals('Fizz', fizzBuzz.speak(6))); runner.add('speak Buzz by 5', () => Expect.equals('Buzz', fizzBuzz.speak(5))); runner.add('speak FizzBuzz by 15', () => Expect.equals('FizzBuzz', fizzBuzz.speak(15))); runner.run(); } class FizzBuzz { speak(number) { var isFizz = (number % 3 == 0); var isBuzz = (number % 5 == 0); if (isFizz && isBuzz) return 'FizzBuzz'; if (isFizz) return 'Fizz'; if (isBuzz) return 'Buzz'; return number.toString(); } }