中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

テストしやすい構造

各所でテストネタが盛り上がってるが、みんな好きねぇ(おいらも含めて)

以下の2つを見てどう思うかのべよ。C#(論述筆記:20点)

string GetFormattedNowDateTimeString()
{return DateTime.Now.ToString("yyyyMMdd hhmmss");}
or
string GetFormattedNowDateTimeString()
{return GetFormattedDateTimeString(DateTime.Now);}
string GetFormattedDateTimeString(DateTime value)
{return value.ToString("yyyyMMdd hhmmss");}

これなら分けてもいいんだけど(^^;;

投稿日時 : 2007年7月27日 10:28

コメントを追加

# re: テストしやすい構造 2007/07/27 11:00 επιστημη

題意を汲み取ってない答案:

GetFormattedNowDateTimeString()
── 現在の日付/時刻を特定フォーマットで書式化した文字列を返す。

ってことらしい。さてここで、
"現在の日付/時刻"はDateTime.Nowで、
"書式化した文字列"はDateTime.ToString()が
それぞれやってくれる。
なのでメソッドが真に提供すべきメソッドは
残る"特定フォーマット"のみである。

したがって問で示されたメソッドは不要で、そのかわり
static string GetDateTimeFormat()
{ return "yyyyMMdd hhmmss"; }
を定義すればいい。

── と思います。

4ねん3くみ えぴ

# re: テストしやすい構造 2007/07/27 11:10 むら

先の方だと、結果として返される文字列がどんな時刻がセットされるか、正確な予想が難しいと思います。

一方、後者だとテストは...
・ちゃんとフォーマット関数を呼び出しているか
・ちゃんとフォーマットしているか
の二点をチェックすれば良いので、テストがしやすいと思います。

いちねんにくみ むら

# re: テストしやすい構造 2007/07/27 11:16 囚人

テストの為だけの後者は無駄です。

ねんちょうあおぐみ しゅう

# re: テストしやすい構造 2007/07/27 12:23 片桐

前者:単体するときはPCの日付時間を変える。ありえない日付時間を入れるってムリだから、例外テストが楽そう

後者:パラメータのテストが大変そう。Valueの型とか内容とかマトリックスにして証跡とって……めちゃ大変。せやけどしとかんとあかんねぇ。パラーメータがあるときー、ないときー(By551)テストもあるし。

ぴんくまぐみ つぐ

# re: テストしやすい構造 2007/07/27 13:50 nagise

Nowそのものがテスト不可能もしくはテスト困難なので、それに汚染されたコードはすべて連鎖的にテスト不可能もしくはテスト困難となるので、比較はナンセンスに思います。

じゃわぐみ なぎ

# re: テストしやすい構造 2007/07/27 19:35 アクア

あとのほう:

そんなにDateTime.Nowが信じられないのかよ!
そんなにDateTime.Nowのフォーマットが気になるのかよ!!
信じてやろうぜ!
なぁ!! みんな!!!

って思った男気の溢れる『夕暮れ番長』こと アクア



ようは、後の方に示されたコードが、Valueに色んな型とか入れて(敢えて)テストしたいためだけのように感じただけです。

# re: テストしやすい構造 2007/07/28 2:53 けろ

というより、後者のコード自身に無駄があるような...
無駄のあるコードをテストするのは、無意味です。
(επιστημηさんが言っていたような修正になるかと。)

それから、前者の方ですが、Now自身のテストは
不可能ですが、ToStringした時の書式やCulture
(今回は指定していませんが)になっているのか
検証が必要かなと思います。
(なんか、1人で別意見言っている気がして、突っ込まれそうw)

ぴんくまぐみ けろ

# re: テストしやすい構造 2007/07/28 18:21 KONNO

例がToStringだけなので、Nowのテストをしているように見えると思うのですが、例えば(メソッド名はごめんなさい)、GetNowGetsudo(現時点の月度を取得する)とかGetNextShimebiFromNow(現在から見て次の締め日を取得する)とかの場合は、是非引数として日付を受け取るメソッドを介して欲しいと思います。
・・・そういう題意だと考えて、後者のような作りを意識する方に賛成です。

タイトル
名前
URL
コメント