vim CalcTest.cpp
1 #include "CalcTest.h"
2
3 /*
4 @TARGET
5 ../Calc.h
6 */
7
8 /*
9 @PRIVATE
10 Calc* calc;
11 */
12
13 void CalcTest::setUp () {
14 calc = new Calc;
15 }
16
17 void CalcTest::tearDown () {
18 delete calc;
19 }
20
21 //========================================
22 // Test Cases
23 //========================================
24
25 //足し算
26 void CalcTest::test_add () {
27 CPPUNIT_ASSERT_EQUAL( 2, calc->add(1,1) );
28 CPPUNIT_ASSERT_EQUAL( 1, calc->add(1,0) );
29 CPPUNIT_ASSERT_EQUAL( 1, calc->add(0,1) );
30 CPPUNIT_ASSERT_EQUAL( 0, calc->add(0,0) );
31 CPPUNIT_ASSERT_EQUAL( 9, calc->add(6,3) );
32 CPPUNIT_ASSERT_EQUAL( 9, calc->add(3,6) );
33 }
34
35 //引き算
36 void CalcTest::test_sub () {
37 CPPUNIT_ASSERT_EQUAL( 0, calc->sub(1,1) );
38 CPPUNIT_ASSERT_EQUAL( 1, calc->sub(1,0) );
39 CPPUNIT_ASSERT_EQUAL( -1, calc->sub(0,1) );
40 CPPUNIT_ASSERT_EQUAL( 0, calc->sub(0,0) );
41 CPPUNIT_ASSERT_EQUAL( 3, calc->sub(7,4) );
42 }
43
44 //掛け算
45 void CalcTest::test_mul () {
46 CPPUNIT_ASSERT_EQUAL( 0, calc->mul(0,0) );
47 CPPUNIT_ASSERT_EQUAL( 1, calc->mul(1,1) );
48 CPPUNIT_ASSERT_EQUAL( 0, calc->mul(0,1) );
49 CPPUNIT_ASSERT_EQUAL( 0, calc->mul(1,0) );
50 CPPUNIT_ASSERT_EQUAL( 4, calc->mul(2,2) );
51 CPPUNIT_ASSERT_EQUAL( 9, calc->mul(3,3) );
52 CPPUNIT_ASSERT_EQUAL(16, calc->mul(4,4) );
53 CPPUNIT_ASSERT_EQUAL(12, calc->mul(3,4) );
54 }
55
56 //割り算
57 void CalcTest::test_div () {
58 CPPUNIT_ASSERT_EQUAL(0, calc->div(0,0) );
59 CPPUNIT_ASSERT_EQUAL(2, calc->div(2,1) );
60 CPPUNIT_ASSERT_EQUAL(1, calc->div(3,2) );
61 CPPUNIT_ASSERT_EQUAL(3, calc->div(15,4) );
62 CPPUNIT_ASSERT_EQUAL(0, calc->div(4,10) );
63 CPPUNIT_ASSERT_EQUAL(1, calc->div(10,10) );
64 }
test
Calcのメンバが無いとか云ってコンパイルが通りません。んではCalcのメンバを追加します。vim ../Calc.h
1 class Calc {クラスの宣言にmulとdivを追加しました。まだ実装は書いてませんが、とりあえず・・・
2 public:
3 int add(int x, int y);
4 int sub(int x, int y);
5 int mul(int x, int y);
6 int div(int x, int y);
7 };
test
コンパイルは通るようですが、リンクで外部参照が解決できないとか言いやがります。それでは次にテストランナーのビルドはできるけど、テストには失敗する ことを期待する空 の実装を書きます。vim ../Calc.cpp
1 #include "Calc.h"Calc::mulとCalc::divを書きました。ではとりあえず・・・
2
3 int
4 Calc::add(int x, int y) {
5 return x+y;
6 }
7
8 int
9 Calc::sub(int x, int y) {
10 return x-y;
11 }
12
13 int
14 Calc::mul(int x, int y) {
15 return 0;
16 }
17
18 int
19 Calc::div(int x, int y) {
20 return 0;
21 }
test
...F.F
!!!FAILURES!!!
Test Results:
Run: 4 Failures: 2 Errors: 0
1) test: CalcTest.test_mul (F) line: 47 CalcTest.cpp
expected: 1
but was: 0
2) test: CalcTest.test_div (F) line: 59 CalcTest.cpp
expected: 2
but was: 0
vim ../Calc.cpp
13 int
14 Calc::mul(int x, int y) {
15 return x*y;
16 }
17
18 int
19 Calc::div(int x, int y) {
20 return x/y;
21 }
test
...E
!!!FAILURES!!!
Test Results:
Run: 4 Failures: 0 Errors: 1
1) test: CalcTest.test_div (E)
"caught unknown exception"
58 CPPUNIT_ASSERT_EQUAL(0, calc->div(0,0) );
vim CalcTest.cpp
56 //割り算
57 void CalcTest::test_div () {
58 CPPUNIT_ASSERT_EQUAL(2, calc->div(2,1) );
59 CPPUNIT_ASSERT_EQUAL(1, calc->div(3,2) );
60 CPPUNIT_ASSERT_EQUAL(3, calc->div(15,4) );
61 CPPUNIT_ASSERT_EQUAL(0, calc->div(4,10) );
62 CPPUNIT_ASSERT_EQUAL(1, calc->div(10,10) );
63 //例外チェック
64 bool exp_chk = false;
65 try {
66 calc->div(0,0);
67 } catch (...) {
68 exp_chk = true;
69 }
70 CPPUNIT_ASSERT( exp_chk );
71 }
test
....
OK (4 tests)