#include #include "Dice.h" #include "MockStdlib.h" class TestDice : public CxxTest::TestSuite { public: MockStdlib *stdlib; void setUp() { TS_ASSERT( stdlib = new MockStdlib ); } void tearDown() { delete stdlib; } void test_Randomize_uses_time() { stdlib->nextTime = 12345; Dice dice; TS_ASSERT_EQUALS( stdlib->lastSeed, 12345 ); } void test_Roll() { Dice dice; stdlib->nextRand = 0; TS_ASSERT_EQUALS( dice.roll(), 1 ); stdlib->nextRand = 2; TS_ASSERT_EQUALS( dice.roll(), 3 ); stdlib->nextRand = 5; TS_ASSERT_EQUALS( dice.roll(), 6 ); stdlib->nextRand = 7; TS_ASSERT_EQUALS( dice.roll(), 2 ); } void test_Temporary_override_of_one_mock_function() { Dice dice; stdlib->nextRand = 2; TS_ASSERT_EQUALS( dice.roll(), 3 ); class Five : public T::Base_rand { int rand() { return 5; } }; Five *five = new Five; TS_ASSERT_EQUALS( dice.roll(), 6 ); TS_ASSERT_EQUALS( dice.roll(), 6 ); TS_ASSERT_EQUALS( dice.roll(), 6 ); delete five; stdlib->nextRand = 1; TS_ASSERT_EQUALS( dice.roll(), 2 ); } };