回答編集履歴

4

余談

2017/02/07 06:50

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -133,3 +133,27 @@
133
133
  みたいにいくらでも抜け道ができて困る
134
134
 
135
135
  ということですよね?
136
+
137
+
138
+
139
+ ---
140
+
141
+
142
+
143
+ 余談
144
+
145
+
146
+
147
+ str -> str + "hoge"自体のテストを抜け道潰して行おうとすると
148
+
149
+ exceptで同じ関数を実装することになって意味がなくなります。
150
+
151
+ こういう場合はProperty based testというものを行います。
152
+
153
+
154
+
155
+ f(x).substring(0,x.length()).equals(x);
156
+
157
+
158
+
159
+ みたいな関数それ自体の性質を何個か作り、それをテストします。

3

修正

2017/02/07 06:50

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- いや、特定の引数に対して変な値を返すように"悪意をもって"実装すればテスト通りますが、
19
+ いや、特定の引数に対して変な値を返すように"悪意をもって"実装すれば高確率でテスト通りますが、
20
20
 
21
21
  要するにテストの文面でランダム値を使うことで、
22
22
 
@@ -26,7 +26,9 @@
26
26
 
27
27
 
28
28
 
29
+ ただ、この程度の関数だと、質問文のコードのままで意図が十分伝わるはずので
30
+
29
- そういう意味では別に質問文のコードのままで全然問題ないことになっちゃいますがね。
31
+ 全然問題ないことになっちゃいますがね。
30
32
 
31
33
 
32
34
 

2

補足

2017/02/07 05:25

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -9,6 +9,24 @@
9
9
 
10
10
 
11
11
  "悪意を持った"実装者がよほど運が良くなければテスト通りません。
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
19
+ いや、特定の引数に対して変な値を返すように"悪意をもって"実装すればテスト通りますが、
20
+
21
+ 要するにテストの文面でランダム値を使うことで、
22
+
23
+ 実装者に「入力としてあり得るすべての値でテスト通るようにしろ」
24
+
25
+ という意図を伝える事ができるってことです。
26
+
27
+
28
+
29
+ そういう意味では別に質問文のコードのままで全然問題ないことになっちゃいますがね。
12
30
 
13
31
 
14
32
 

1

回答追加

2017/02/07 05:22

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -1,3 +1,21 @@
1
+ 少々乱暴な方法ですが、
2
+
3
+ 関数と関数が同じかを確かめる方法の一つに、
4
+
5
+ 十分多い数、引数をランダム生成して、
6
+
7
+ 全部通るか検証する方法があります。
8
+
9
+
10
+
11
+ "悪意を持った"実装者がよほど運が良くなければテスト通りません。
12
+
13
+
14
+
15
+ ---
16
+
17
+
18
+
1
19
  ※回答じゃないです
2
20
 
3
21