teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

余談

2017/02/07 06:50

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -65,4 +65,16 @@
65
65
  }
66
66
  ```
67
67
  みたいにいくらでも抜け道ができて困る
68
- ということですよね?
68
+ ということですよね?
69
+
70
+ ---
71
+
72
+ 余談
73
+
74
+ str -> str + "hoge"自体のテストを抜け道潰して行おうとすると
75
+ exceptで同じ関数を実装することになって意味がなくなります。
76
+ こういう場合はProperty based testというものを行います。
77
+
78
+ f(x).substring(0,x.length()).equals(x);
79
+
80
+ みたいな関数それ自体の性質を何個か作り、それをテストします。

3

修正

2017/02/07 06:50

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -7,12 +7,13 @@
7
7
 
8
8
  ---
9
9
 
10
- いや、特定の引数に対して変な値を返すように"悪意をもって"実装すればテスト通りますが、
10
+ いや、特定の引数に対して変な値を返すように"悪意をもって"実装すれば高確率でテスト通りますが、
11
11
  要するにテストの文面でランダム値を使うことで、
12
12
  実装者に「入力としてあり得るすべての値でテスト通るようにしろ」
13
13
  という意図を伝える事ができるってことです。
14
14
 
15
+ ただ、この程度の関数だと、質問文のコードのままで意図が十分伝わるはずので
15
- そういう意味では別に質問文のコードのままで全然問題ないことになっちゃいますがね。
16
+ 全然問題ないことになっちゃいますがね。
16
17
 
17
18
  ---
18
19
 

2

補足

2017/02/07 05:25

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -7,6 +7,15 @@
7
7
 
8
8
  ---
9
9
 
10
+ いや、特定の引数に対して変な値を返すように"悪意をもって"実装すればテスト通りますが、
11
+ 要するにテストの文面でランダム値を使うことで、
12
+ 実装者に「入力としてあり得るすべての値でテスト通るようにしろ」
13
+ という意図を伝える事ができるってことです。
14
+
15
+ そういう意味では別に質問文のコードのままで全然問題ないことになっちゃいますがね。
16
+
17
+ ---
18
+
10
19
  ※回答じゃないです
11
20
 
12
21
  質問文だとexpectの方を書き換えちゃってますが、

1

回答追加

2017/02/07 05:22

投稿

ozwk
ozwk

スコア13553

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