app.version = '1.0.0'
テストコード
expect(app.version).to.be '1.0.0'
バージョン番号1.1.0に変更すっぞ!
app.version = '1.1.0' に修正
expect(app.version).to.be '1.1.0' に修正
これただのデータの重複、たんなる二重管理ですから\(^o^)/
メンテナンス工数が二倍になるだけ
誰もそんなことやらねーよって思うかもしれないが
関数だったらやってしまうんだよね。
カバレッジがー(笑)
function getVersion() { return '1.1.0' }
expect(app.getVersion()).to.be '1.1.0'
他にも色々と、意味がないテストがある
意味がないテストしてるやつが多い。
関数の実行結果をテストコードにコピペしてテスト作るやつとかな
探検
意味がないテストをするな。VERSION==1.0.0 [無断転載禁止]©2ch.net
2017/09/09(土) 15:31:54.82ID:al+wrNfN
2017/09/09(土) 16:54:48.95ID:hfmQ7RMB
どっかユーザの目に入るところにバージョンでるなら意味あるんじゃね?
2017/09/09(土) 17:25:35.09ID:5TYgeUeA
その前に意味のないコードを入れるな
意味があるならその意味に沿ってちゃんとテストすべき
意味があるならその意味に沿ってちゃんとテストすべき
2017/09/09(土) 20:10:39.54ID:GB2h7YGf
その前に意味のないスレを立てるな
5デフォルトの名無しさん
2017/09/09(土) 20:49:02.98ID:al+wrNfN 意味がないテストっていうのは他にも有るな。
例えばテンプレートの適用結果をテストするとかな
HTML生成のためのテンプレートがあって、
テンプレートファイルを手書きして(ここまでは普通)
そのテンプレートに値を入れたHTMLをテストとして手書きする(アホ)
例えばテンプレートの適用結果をテストするとかな
HTML生成のためのテンプレートがあって、
テンプレートファイルを手書きして(ここまでは普通)
そのテンプレートに値を入れたHTMLをテストとして手書きする(アホ)
2017/09/09(土) 21:17:51.67ID:al+wrNfN
正規表現バリデーションのテストも大概意味がない。
正規表現がものすごく複雑っていうのなら話は別だが、
/^[0-9]+$/ みたいに書いてあるものに対して
数字以外入れたらエラーになることを確かめるテストはいらない
正規表現がものすごく複雑っていうのなら話は別だが、
/^[0-9]+$/ みたいに書いてあるものに対して
数字以外入れたらエラーになることを確かめるテストはいらない
2017/09/09(土) 21:23:57.43ID:al+wrNfN
まあ正規表現バリデーションのテストに関して言えば、
正規表現を直接書くのではなく、numonlyなどというメソッドを作るべき。
そのnumonlyのテストを書くのは少しは意味がある。
だけど、このフィールドはnumonlyになっているか?という
確実にテストは必要ない。
SQLのスキーマのテストしてるようなもんだよ。
SQLのcreate table文で、priceの項目をintegerと書いて
そのテストコードで、create table文のpriceがintegerであること
とテストすることに何の意味があるのだろうか
正規表現を直接書くのではなく、numonlyなどというメソッドを作るべき。
そのnumonlyのテストを書くのは少しは意味がある。
だけど、このフィールドはnumonlyになっているか?という
確実にテストは必要ない。
SQLのスキーマのテストしてるようなもんだよ。
SQLのcreate table文で、priceの項目をintegerと書いて
そのテストコードで、create table文のpriceがintegerであること
とテストすることに何の意味があるのだろうか
2017/09/09(土) 23:25:06.47ID:al+wrNfN
あー、関係ない所でアイデア思いついたわ
一部でテストのことをスペックと呼ぶ文化が有るだろ?
変数の型とかバリデーションとか
コードに書かないでスペックに書けば良いんじゃね?
一部でテストのことをスペックと呼ぶ文化が有るだろ?
変数の型とかバリデーションとか
コードに書かないでスペックに書けば良いんじゃね?
2017/09/10(日) 02:59:20.70ID:CfAD8p5O
>>1
>function getVersion() { return '1.1.0' }
>expect(app.getVersion()).to.be '1.1.0'
バージョンアップのたびにテストコードを変更してメンテするのは微妙すぎるだろ
そうじゃなく、そのバージョン用のテストスイートを書いてるのであればその種のテストにも十分意味がある
(例えば1.0系のテストと1.1系のテストを並列でメンテしてる場合)
今は単純文字列を返す実装だから無意味に感じるのだろうが
リファクタして設定ファイルからバージョンを取得するようにしたり
DBからバージョンを取得するようになったりしても
仕様を満たしてるかどうかを確認できる
テストが不要なくらい明白な実装かどうかを
毎回判断しながらテストケースを管理することのほうが意味がない
>function getVersion() { return '1.1.0' }
>expect(app.getVersion()).to.be '1.1.0'
バージョンアップのたびにテストコードを変更してメンテするのは微妙すぎるだろ
そうじゃなく、そのバージョン用のテストスイートを書いてるのであればその種のテストにも十分意味がある
(例えば1.0系のテストと1.1系のテストを並列でメンテしてる場合)
今は単純文字列を返す実装だから無意味に感じるのだろうが
リファクタして設定ファイルからバージョンを取得するようにしたり
DBからバージョンを取得するようになったりしても
仕様を満たしてるかどうかを確認できる
テストが不要なくらい明白な実装かどうかを
毎回判断しながらテストケースを管理することのほうが意味がない
2017/09/10(日) 03:10:32.77ID:CfAD8p5O
2017/09/10(日) 03:16:10.29ID:CfAD8p5O
>>5
それはテンプレートエンジンのテスト
テンプレートエンジンのバージョンなんかが変わっても同じ結果を取得できてるねってやつ
3rdパーティライブラリのテストだから自分の書いてるアプリのテストとは種類が違う
それはテンプレートエンジンのテスト
テンプレートエンジンのバージョンなんかが変わっても同じ結果を取得できてるねってやつ
3rdパーティライブラリのテストだから自分の書いてるアプリのテストとは種類が違う
2017/09/10(日) 08:18:10.38ID:G4ZVCKWZ
>>9
> 今は単純文字列を返す実装だから無意味に感じるのだろうが
> リファクタして設定ファイルからバージョンを取得するようにしたり
> DBからバージョンを取得するようになったりしても
> 仕様を満たしてるかどうかを確認できる
重要なのはなにをテストしているのかをきっちり理解することですよ
バージョン番号が書いてあるところがファイルでも変数でも関係ないですが、
1.0.0と書いたものが、1.0.0であることをテストしたいのか?
それとも、バージョン番号が正しく取得できることをテストしたいのか?
1.0.0と書いたものが1.0.0であることとかアホらしいですよねw
そう書いたんだから、そう取得できるのは当たり前
これは単なるデータの二重管理に過ぎません。
重要なのは、バージョン番号が正しく取得できることなのですよ。
具体的なデータ(バージョン番号)はダミーデータで十分です。
まずテストコードでそのダミーデータ(例えば0.0.1)を
変数なり、ファイルなり、DBなりに格納します。
そしてそれがgetVersion()で正しく取得できることテストするのです。
そうすりゃ、getVersion() == 1.0.0
あ゛〜、バージョンが上がっちまったー、VERSIONファイルと
テストコードの両方を1.1.0に修正しなきゃーなんて
アホなメンテは必要なくなるなるわけです。
> 今は単純文字列を返す実装だから無意味に感じるのだろうが
> リファクタして設定ファイルからバージョンを取得するようにしたり
> DBからバージョンを取得するようになったりしても
> 仕様を満たしてるかどうかを確認できる
重要なのはなにをテストしているのかをきっちり理解することですよ
バージョン番号が書いてあるところがファイルでも変数でも関係ないですが、
1.0.0と書いたものが、1.0.0であることをテストしたいのか?
それとも、バージョン番号が正しく取得できることをテストしたいのか?
1.0.0と書いたものが1.0.0であることとかアホらしいですよねw
そう書いたんだから、そう取得できるのは当たり前
これは単なるデータの二重管理に過ぎません。
重要なのは、バージョン番号が正しく取得できることなのですよ。
具体的なデータ(バージョン番号)はダミーデータで十分です。
まずテストコードでそのダミーデータ(例えば0.0.1)を
変数なり、ファイルなり、DBなりに格納します。
そしてそれがgetVersion()で正しく取得できることテストするのです。
そうすりゃ、getVersion() == 1.0.0
あ゛〜、バージョンが上がっちまったー、VERSIONファイルと
テストコードの両方を1.1.0に修正しなきゃーなんて
アホなメンテは必要なくなるなるわけです。
131 == 12
2017/09/10(日) 08:38:12.02ID:G4ZVCKWZ >>12の考え方はすごく重要で、これを理解していないために
無意味なテストをしていることが多い。
ロジックではなくデータをテストしている。
書いたものがそう書いてあるか?だけを調べている
無意味なテストが極めて多い。
無意味なテストをしていることが多い。
ロジックではなくデータをテストしている。
書いたものがそう書いてあるか?だけを調べている
無意味なテストが極めて多い。
2017/09/10(日) 08:38:50.50ID:G4ZVCKWZ
つまりテストを書くときはダミーデータを使うということですね。
2017/09/10(日) 10:49:50.23ID:1MFrqOnc
ダミーだこりゃ
2017/09/10(日) 10:56:13.13ID:G4ZVCKWZ
>>10
> バリデーションのテストは
> 「ある項目に数字以外を入れたらエラーになる」という
> 仕様を満たしているかどうかのテストであって正規表現のテストをするわけではない
> 実装が正規表現である必要もない
はい、そのとおりですね。
処理をしているのが正規表現であるかそれ以外のコードであるかは関係ない。
だからここでやるべきことはnumberOnlyという関数を作ること
そしてそのnumberOnlyが仕様を満たしているかどうか? のテストです。
これは入念にテストする必要があるでしょう。
もしてテストしなければいけない(?)項目はもう一つ残っていますね?
numberOnlyのバリデーションが設定されている項目はpriceだけではなく
sizeやcountなどもいくつもあるでしょう。
それらの数値項目が10個あったとき、10個全てに
numberOnlyでやったのと同じ入念なテストは必要ないのですよ。
まあやるとしたとしても「ある項目のバリデーションがnumberOnlyであること」
ぐらいでしょうが、これもまさに項目のバリデーションにnumberOnlyと
書いたんだから当然numberOnlyに決まってるだろという
データの二重管理にすぎない問題になるわけですよ。
自分で定義したものが(書いたものが)、自分で定義した(書いた)とおりに
なっているかなんて意味がないテストです
> バリデーションのテストは
> 「ある項目に数字以外を入れたらエラーになる」という
> 仕様を満たしているかどうかのテストであって正規表現のテストをするわけではない
> 実装が正規表現である必要もない
はい、そのとおりですね。
処理をしているのが正規表現であるかそれ以外のコードであるかは関係ない。
だからここでやるべきことはnumberOnlyという関数を作ること
そしてそのnumberOnlyが仕様を満たしているかどうか? のテストです。
これは入念にテストする必要があるでしょう。
もしてテストしなければいけない(?)項目はもう一つ残っていますね?
numberOnlyのバリデーションが設定されている項目はpriceだけではなく
sizeやcountなどもいくつもあるでしょう。
それらの数値項目が10個あったとき、10個全てに
numberOnlyでやったのと同じ入念なテストは必要ないのですよ。
まあやるとしたとしても「ある項目のバリデーションがnumberOnlyであること」
ぐらいでしょうが、これもまさに項目のバリデーションにnumberOnlyと
書いたんだから当然numberOnlyに決まってるだろという
データの二重管理にすぎない問題になるわけですよ。
自分で定義したものが(書いたものが)、自分で定義した(書いた)とおりに
なっているかなんて意味がないテストです
2017/09/10(日) 11:30:43.35ID:G4ZVCKWZ
> 自分で定義したものが(書いたものが)、自分で定義した(書いた)とおりに
勘違いされそうだから補足しておくと、
書いたものが書いたとおりになるっていうのはデータの話な
プログラマによる処理が一切なく、加工されずに
そのまま結果となるようなもの
書いたコードが書いた通り動くという話はもちろんしてない。
Aと書いたんだから、Aに決まってるだろ。レベルの話。
勘違いされそうだから補足しておくと、
書いたものが書いたとおりになるっていうのはデータの話な
プログラマによる処理が一切なく、加工されずに
そのまま結果となるようなもの
書いたコードが書いた通り動くという話はもちろんしてない。
Aと書いたんだから、Aに決まってるだろ。レベルの話。
2017/09/10(日) 11:37:19.05ID:G4ZVCKWZ
>>11
> それはテンプレートエンジンのテスト
> 3rdパーティライブラリのテストだから自分の書いてるアプリのテストとは種類が違う
テンプレートエンジン自身のテストは
テンプレートエンジン開発側で行ってる
自作のテンプレートエンジンの話は別
「3rdパーティライブラリのテスト」と書いてあるから
その点は同意取れていると思うが
俺が言ってるのは具体例を出すと以下のようなテンプレートファイルがあった時
<html>
<head>
<title>{{title}}</title>
</head>
<body>
数十行のコード
</body>
</html>
テストコードの中に、このテンプレートにtitleの値を埋め込んだ、以下のようなテストを書く意味は無いってこと
expect(template('file.tmpl.html', {title: 'タイトル'})).to.be "<html>\n <head>\n <title>タイトル</title>\n〜"
さすがににそんなことやってるやつはいないと思うがねw
> それはテンプレートエンジンのテスト
> 3rdパーティライブラリのテストだから自分の書いてるアプリのテストとは種類が違う
テンプレートエンジン自身のテストは
テンプレートエンジン開発側で行ってる
自作のテンプレートエンジンの話は別
「3rdパーティライブラリのテスト」と書いてあるから
その点は同意取れていると思うが
俺が言ってるのは具体例を出すと以下のようなテンプレートファイルがあった時
<html>
<head>
<title>{{title}}</title>
</head>
<body>
数十行のコード
</body>
</html>
テストコードの中に、このテンプレートにtitleの値を埋め込んだ、以下のようなテストを書く意味は無いってこと
expect(template('file.tmpl.html', {title: 'タイトル'})).to.be "<html>\n <head>\n <title>タイトル</title>\n〜"
さすがににそんなことやってるやつはいないと思うがねw
2017/09/10(日) 11:42:21.70ID:G4ZVCKWZ
> テンプレートエンジンのバージョンなんかが変わっても同じ結果を取得できてるねってやつ
これは自分の書いたコードのテストではなく互換性のテスト。
互換性のテストは通常サードパーティ側でやってるはずだが
信じられないのであれば自分でやる必要があるかもしれない。
だがその場合でも>>18のようなテストは不要
なぜならダミーデータでテストすればいいからだ。
この場合 {{ }} の仕様に互換性があることをテストするために
テンプレートファイルの中身は {{title}} この一行で良い
>>18のような長ったらしいHTMLテンプレートファイルを使って
互換性テストをやる必要はない。
{{title}} の部分は、書いた文字そのまま返ってくるわけではなく
加工される部分だから互換性テストを行う必要はある。
だが {{title}}以外の部分は書いた文字がそのまま
返ってきているだけなのでテストする必要はない。
これは自分の書いたコードのテストではなく互換性のテスト。
互換性のテストは通常サードパーティ側でやってるはずだが
信じられないのであれば自分でやる必要があるかもしれない。
だがその場合でも>>18のようなテストは不要
なぜならダミーデータでテストすればいいからだ。
この場合 {{ }} の仕様に互換性があることをテストするために
テンプレートファイルの中身は {{title}} この一行で良い
>>18のような長ったらしいHTMLテンプレートファイルを使って
互換性テストをやる必要はない。
{{title}} の部分は、書いた文字そのまま返ってくるわけではなく
加工される部分だから互換性テストを行う必要はある。
だが {{title}}以外の部分は書いた文字がそのまま
返ってきているだけなのでテストする必要はない。
2017/09/10(日) 13:28:42.54ID:ZKxYrqVl
設計書書けよ
2017/09/10(日) 14:12:07.70ID:CfAD8p5O
>>16
>まあやるとしたとしても「ある項目のバリデーションがnumberOnlyであること」
分かってる風で分かってないね
「ある項目のバリデーションがnumberOnlyであること」ってのは仕様じゃなく実装方法
その区別がついてないから中身の無い長文を量産するんだよ
>expect(template('file.tmpl.html', {title: 'タイトル'})).to.be "<html>¥n <head>¥n <title>タイトル</title>¥n〜"
このコードはテスト方法よりもテストの意図が全く伝わらないほうが大きな問題
悪い例として書いてるけど、仕様と実装の区別がついてないからこそ
議論の焦点がテストの仕様ではなくテストの実装に当たってる
>まあやるとしたとしても「ある項目のバリデーションがnumberOnlyであること」
分かってる風で分かってないね
「ある項目のバリデーションがnumberOnlyであること」ってのは仕様じゃなく実装方法
その区別がついてないから中身の無い長文を量産するんだよ
>expect(template('file.tmpl.html', {title: 'タイトル'})).to.be "<html>¥n <head>¥n <title>タイトル</title>¥n〜"
このコードはテスト方法よりもテストの意図が全く伝わらないほうが大きな問題
悪い例として書いてるけど、仕様と実装の区別がついてないからこそ
議論の焦点がテストの仕様ではなくテストの実装に当たってる
2017/09/10(日) 16:08:22.02ID:G4ZVCKWZ
2017/09/10(日) 16:09:56.35ID:G4ZVCKWZ
>>21
> 「ある項目のバリデーションがnumberOnlyであること」ってのは仕様じゃなく実装方法
> その区別がついてないから中身の無い長文を量産するんだよ
あんたは「それは違う」とだけ書いて理由を何も書いていない。
> 「ある項目のバリデーションがnumberOnlyであること」ってのは仕様じゃなく実装方法
> その区別がついてないから中身の無い長文を量産するんだよ
あんたは「それは違う」とだけ書いて理由を何も書いていない。
2017/09/10(日) 16:10:45.25ID:G4ZVCKWZ
つーかテストの仕様ってなんだ?
それをいうならアプリの仕様だろ
それをいうならアプリの仕様だろ
2017/09/10(日) 16:11:17.12ID:G4ZVCKWZ
あとVERSIONの話は反論なしかw
2017/09/10(日) 17:18:17.17ID:ZKxYrqVl
設計書書けよw
単体なら設計書通りに動くかどうかをテストしろよ
コード見てテストを決めようとするからそんな問題が出てくんだろが雑魚が
単体なら設計書通りに動くかどうかをテストしろよ
コード見てテストを決めようとするからそんな問題が出てくんだろが雑魚が
2017/09/10(日) 17:25:04.80ID:G4ZVCKWZ
こう言いかえれば良いんですかね?
問題は設計書に1.0.0が返ってくることって
書くのはアホらしいって話ですな。
バージョンが上がるたびに1.1.0が返ってくる
ことなんて修正しないといけない
VERSIONファイルに1.1.0と書いてあるのだから
1.1.0が帰ってくるなんて当たり前でしょう。
また数字のみであることというテストは
項目のバリデーション定義ファイルにnumberOnlyと
書いて有ることを確認すれば良いわけですよ。
バリデーション定義ファイルにnumberOnlyと書いてあるのだから
numberOnlyであるのは当たり前。なのに項目一つづつ
numberOnlyの仕様を満たしているか?というテストをするのは無意味です。
画面の出力結果を目視で観察するぐらいなら
定義ファイルを目視で観察すれば良いのです。
自動化のためにテストコードを書くというのなら、
定義ファイルに書いて有ることをテストすれば良いのです。
numberOnlyと書いてある事。とね。
問題は設計書に1.0.0が返ってくることって
書くのはアホらしいって話ですな。
バージョンが上がるたびに1.1.0が返ってくる
ことなんて修正しないといけない
VERSIONファイルに1.1.0と書いてあるのだから
1.1.0が帰ってくるなんて当たり前でしょう。
また数字のみであることというテストは
項目のバリデーション定義ファイルにnumberOnlyと
書いて有ることを確認すれば良いわけですよ。
バリデーション定義ファイルにnumberOnlyと書いてあるのだから
numberOnlyであるのは当たり前。なのに項目一つづつ
numberOnlyの仕様を満たしているか?というテストをするのは無意味です。
画面の出力結果を目視で観察するぐらいなら
定義ファイルを目視で観察すれば良いのです。
自動化のためにテストコードを書くというのなら、
定義ファイルに書いて有ることをテストすれば良いのです。
numberOnlyと書いてある事。とね。
レスを投稿する
ニュース
- 高市首相、トランプ米大統領に「早期に会いたい」 日中関係悪化受け… [BFU★]
- 【コメ】卸売業者「簡単に安売りできない」「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 ★4 [Hitzeschleier★]
- 【将棋】福間香奈 女流六冠が会見 妊娠・出産でタイトル戦の事実上不戦敗 「妊娠したら、どちらか一方を諦めないといけない状況」★2 [冬月記者★]
- 高市早苗首相が天理教系企業に“巨額発注” 総額5000万円 本人は「政治団体の活動に必要な支出」と回答 [Hitzeschleier★]
- ホリエモン、「持ち家=幸せという価値観は過去のもの」と断言「快適な住まいが欲しいなら、賃貸住宅を次々に替えていく」 [muffin★]
- かつや、明日からカツ丼(竹)790円→590円、ロースカツ定食830円→630円、カツカレー(竹)990円→790円 画像あり [お断り★]
- 【助けて!】Colaboの仁藤夢乃さん「暇空のせいで毎月赤字で1千万円以上寄付金が足りないの😭」 [455031798]
- 高市「中韓を挑発する発言すれば支持者のネトウヨが称賛してくれたからやめられなかったの!アタシ悪くない!」どうする? [165981677]
- 【実況】博衣こよりのえちえち声優楽プロジェクト共同研究発表会🧪
- 日銀植田発言で円安進展トヨタの株が続伸🤗ぼーくぼーく笑っちゃいます😂 [993451824]
- 高市早苗、トランプおやびんに泣きつくwwwwwwwwwwwwwwwwwwwwwwww [834922174]
- ケンモメンってなんでこんなに反日が多いの? [866936191]
