テストしにくいコードをテストする方法 その2 [無断転載禁止]©2ch.net
ここで言うテストっていうのは
ユニットテストみたいなものね。
人間がぽちぽち操作してやるテストじゃありません。
前スレ テストしにくいコードをテストする方法教えて下さい
http://echo.2ch.net/test/read.cgi/tech/1334408391/ >>617
テストすることで何が得られるんでしょうか?
100行程度なので実行コードを見れば
何をしているかなんて明らかななんですよ
テストコード書いたらおそらく100行以上になるので
実行コードを見るよりも時間が掛かるでしょう。 >>618
何が得られるかはお前にしか分からない
テストしても新たな情報が得られないのが分かっているならテストしなくて良いよ >>620
ですよね。これぐらいの短いコードに
テストコードがあったて意味が無いと思ってました >>618
テスト対象は今後変更することは無い?
もし変更するのであれば、テストコードはリグレッションテスト用として価値があるかと。 >>622
変更するときは仕様を変えるときだろうな。
その時はテストも変えないといけないだろうね。
100行って意外と大したことないよ。
コマンドライン引数の処理部分で20行ぐらい使ってるし。
(当然ライブラリ使ってるのでここに条件分岐とかない) 今ある機能はそのままで機能追加とかよくある事だと思うんだけど シンプルに単機能にしてるからなぁ。
全く別の機能を追加するぐらいだったら
別のツールにするし。
出来る限り機能は削ぎたいぐらい というかクラスにも関数にもなってないようなもの
というかそうするまでもないような短いコードに
どうやってテストを書けばいいのかわからん
テストを書くためにわざわざ関数やクラスにして
モック使って倍以上の量にして
それを読めって言う方が大変だろう >>623
あぁ、テスト対象って特定の機能じゃなくてクラスとかモジュールとかもっと大きな単位で考えてたわ。言葉足らずだったか。
今までの機能はそのままで追加機能とか別の機能の変更とかそういう時のリグレッションテストに役立つかと。 テストはなくても簡単にサンプルが実行できるスクリプトとかは
書いておいた方がいいんじゃないの? ライブラリ使ってるというならそのライブラリの挙動含めて意図通りになってるかテスト書いておいた方がいいと思うけどね。
俺の環境では動いたは仕事では通らないし。
環境含めて提供するなら別だが、単機能のツールにDockerとか持ち出されても困るだろ。
趣味なら好きにしたらいい 100行程度のツールとかなら
・正常系
・ファイルがないとか読めない
・サーバーにアクセスできない
・...(ファイルの内容を色々)
程度のテストはする
よほど重要とか多数の人に配るとかでもない限りREST API のモックまではやらないな >>635
最初に書いてあるよね?
> やる価値ありますか? そりゃテストコードを書く場合と一緒だろ
お前は誰のためにテスト書いてるんだよ? >>634
俺なら書くよ。
逆に聞きたいけど、例えばその規模のコードを書くとき、全く動作確認もせずに0から全部書き切るの?
いや、動作確認はするよってことだったら、それはテストだよね。 >>639
テストコードは書かないよ
実際に動かしてテストすればいい >>640
10行書く毎にテストするとして、最後の1回の動作確認は最後に書いた10行分の動作確認をするの?
それとも、今まで確認したこと全てやりなおすの?
前者だとしたら、今までOKだったものが動作しなくなっている場合に検知できないし、後者なら
動作確認に時間がかかりすぎる。
だから、俺たちはテストコードを書くんだ。 > それとも、今まで確認したこと全てやりなおすの?
単機能なんで、今まで確認したことの全て=一つと言ってもいいぐらいなんだよw もちろん全く一つではないけどね。
オプションで-vをつけると詳細なログがでる。
というテストを書く?
オプションで--debugとつけると
デバッグログが出力される
というテストを書く?
--versionと書くとVERSION変数の中身を表示するだけ
というテストを書く? >>642
> 単機能なんで、今まで確認したことの全て=一つと言ってもいいぐらいなんだよw
いやいや、例えば>>634のコードなら、というのが前提の話だよ。
> というテストを書く?
書かないよ。
まぁざっくり言えばC0カバレッジで考えたときに、明らかに意味のないもの以外のテストを書くだろうね。
仮に_check_config(), _get_config()なんかがリファクタリング(重複コードのメソッド抽出)の
結果だとするなら、何度もテストできるテストコードがあってよかった、ってことになると思う。 まあ短いコードでもネットワークアクセスやデータベースアクセスみたいに
副作用の強いものとつながってるんなら、
そういう部分をスタブで置き換えてテストできるくらいには
整えておくのもいいんじゃないかね。 テストするかどうかも決まってないのに
方法に来てどうするんだ 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
UZFWS ユニットにできないなら結合した状態でテストするしかあるまい。
リファクタリングするなりして徐々にテスト範囲を小さくするが王道。 ftpクライアントみたいなsocket通信を含むライブラリを開発しようと思ったらどうやってテストコード書きます?
2つソケット作って相互テストする? 一応別プロセス立ち上げてお互いに通信させるようなコード書くかな。 テストしたいのが通信そのものじゃなくて自分のロジックならスタブやモックを使うのが良いんじゃね。
総コーディング量が多くなったり想定していない状況が漏れたりする可能性があるけど、逆に
想定できる状況なら網羅性を高くできるしテスト環境準備の手間も少なくなる。 関数のアウトプットのオブジェクトがダイナミックに構造を変える時のパラメータ化テストが難しい >>658
いくら構造が変わるからといっても条件があるだろうから、その条件を固定して出力構造を固定化してやればよくね? >>659
条件固定でやるのは当然だけど
出力の構造が異なるとパラメータ化して一気にテストってのができない
構造ごとにテストケースを書かないといけない 外部APIクライアントのテストってどうやってんだ?
テスト専用アカウント作ってやるとか? >>661
インフラではなく、プログラミングレベルの妥当性確認がしたいのなら、フレームワークの機能を使ってテストするのが一般的じゃないかな。
やることは大抵、登録処理の実行、レスポンスの確認、データ取得処理の実行、レスポンスの確認、登録エラーが起こる処理の実行...をテストフレームワークが用意したライブラリを使ってゴリゴリテストコードに記述していくだけだけど。
当然、テストフレームワーク環境での実行なので、サーバーサイドは真っ白な状態からスタートする。 夜間バッチのテストが難しすぎて困った
組み合わせ多すぎ、処理フロー複雑すぎでどうやってテストしたらいいか頭が追いつかない ずっと悩んでるけど夜間バッチ処理のテストいまだにわからんすわ
ペアワイズ法とか色々小賢しいテクニックでテストケースを減らすことができることは学んだけど
それやった上でもまともに管理できるテストケース数じゃなくなるんだが…
マジでどうすりゃいいのさ
クラスが綺麗に分離しててそれぞれ独立にテストできればそうして結合は手抜きでも良いかなって考えたんだけど
コードをリファクタリングする権限なんて無いしな…
副作用はRDBだけだからインフラ周りで難しいことはないけど
単純にテストケース数が多すぎて手に負えない
みんなどうやって解決してんだろ
>664
ログ出力で何をするんですかね テストが難しいような単位で物を作っているからいけない。 画面がないと動かせない
データベースがないと動かせない
切り離すのめんどくさい