■テストファーストツール調査
■Test Driven .Net
下記のサイトから
http://www.testdriven.net/download_select.aspx
Test Driven .Netをダウンロードしインストール。(フリー版)
TestDriven.NETをインストールする
(1)TestDrivern.Net 2.8.1230 perosnal をインストール
(2)Visual Studioの[ツール]-[アドインマネージャ]で、「TestDriven.NET」にチェックを入れる
単体テストプログラムを作成する
(1)アプリケーションとは別のプロジェクトを単体テスト用に作成し、ディレクトリ構成も合わせる
(2)プロジェクトの参照先に、TestDriven.NETのインストール先にあるnunit.framework.DLLを追加する
(3)XXXTestという名前のクラスを生成して、テストコードを実装する
(4)テストプロジェクトを参照へ追加。
(5)テストクラスへ[TestFixture]、テストメソッドへ[Test]を設定。
(6)Assert.AreEqual(ConnectionState.Open, dba.Connection.State, "db open success");という感じでチェック。
動作確認OK。
■NCover、NCoverExploer
Test Driven .netにハンドルされています。カバー率を確認可能。
これも良い感じです。フリーですし。
■Test Runner for Visual Studio 2005を試す
C:\Program Files\Mailframe\TestRunner\へインストール
テスト結果をIDE上へグラフィカルに表示してくれます。
$49かかりますが、とても良い感じです。会社として買うのならOKです。
■NUitをインストール。
Test Driven .Net側で別のフォルダへインストールされたが、それとは別でインストール。
Visual Studio 2005との連携は、プロジェクトの
[プロパティ]-[デバッグ]の[開始動作]の[外部プログラムの開始]
に
"C:\Program Files\NUnit 2.4.2\bin\nunit.exe"
を設定、次に[開始オプション]-[コマンドライン引数]へ
テストプロジェクトの.dll /run
を設定。VS2005を実行するとNUnitが実行されます。
■log4net調査
(1)log4netをダウンロード
下記サイトを参考にログを出力を行う。
http://igeta.cocolog-nifty.com/blog/2007/06/log4net.htmlhttp://igeta.cocolog-nifty.com/blog/2007/06/log4net.html
(2)下記の内容のlog4net.configを作成する。
<?xml version="1.0" encoding="utf-8" ?>
<!-- [log4net.config] -->
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<appSettings>
<!-- log4net 内部のデバッグメッセージを出力 -->
<add key="log4net.Internal.Debug" value="true" />
</appSettings>
<log4net>
<!-- コンソール出力用 (VS 上 [出力] ウインドウへの出力) -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<!-- 出力文字列のフォーマット -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="@%-5level>> %message%newline" />
</layout>
</appender>
<!-- ファイル出力用 -->
<appender name="DailyFileAppender"
type="log4net.Appender.RollingFileAppender">
<!-- ログファイルの切替 { サイズ: Size, 日付: Date } -->
<param name="RollingStyle" value="Date" />
<!-- ファイル名 -->
<param name="File" value="log/" />
<!-- ファイル名に付加する日付パターン -->
<param name="DatePattern" value='yyyy-MM"/AppName_"yyMMdd".log"' />
<!-- ファイル名の固定 -->
<param name="StaticLogFileName" value="false" />
<!-- ファイル書き込み { 追記: true, 上書き: false } -->
<param name="AppendToFile" value="true" />
<!-- 最大保存ファイル数 (古い順に削除) -->
<param name="MaxSizeRollBackups" value="32" />
<!-- 出力文字列のフォーマット -->
<layout type="log4net.Layout.PatternLayout">
<header type="log4net.Util.PatternString" value='[task time="%date{HH:mm:ss,fff}"]%newline' />
<footer type="log4net.Util.PatternString" value="[/task]%newline" />
<conversionPattern value="%-5level %date{yyyy/MM/dd_HH:mm:ss,fff} [%thread] %logger [%property{NDC}] - %message%newline" />
</layout>
<!-- 出力するログ レベルのフィルタ -->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
</appender>
<!-- イベント ログ出力用 -->
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<!-- イベント ログ上のアプリケーション名 -->
<applicationName value="AppName" />
<!-- 出力文字列のフォーマット -->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level %date{yyyy/MM/dd_HH:mm:ss,fff} [%thread] %logger [%property{NDC}] - %message%newline" />
</layout>
<!-- 出力するログ レベルのフィルタ -->
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
</appender>
<!-- デフォルトの出力設定 -->
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="DailyFileAppender" />
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
</configuration>
(3)AssemblyInfo.cs へ下記の内容を追加。
// [AssemblyInfo.cs]
// Log4Net の設定
//
// ConfigFile を指定しない場合は、このプロジェクトの app.config を使用する。
// 開発環境下では、proj/ の config ファイルを proj/bin/Debug/ の exe から
// 参照するので、この設定になる。デプロイ時は要変更。注意すること。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"../../log4net.config", Watch = true)]
※log4net.configファイルを出力ディレクトリへコピーするので、
ConfigFile = @"../../log4net.config" を ConfigFile = @"log4net.config" へ変更。
(4)使用するクラスへ下記を記述する。
// [ロギングするクラス]
// フィールド
private static readonly log4net.ILog logger =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
//メソッド内などのログをとりたい場所で...
logger.Debug("logger.Debug");
logger.Info("logger.Info");
logger.Warn("logger.Warn");
logger.Error("logger.Error");
logger.Fatal("logger.Fatal");
logger.ErrorFormat("DATA={0}/{1}", "AAA", "BBB");
(5)出力結果
[task time="13:42:28,046"]
INFO 2007/11/29_13:42:28,437 [10] Test_log4net.Form1 [(null)] - logger.Info
WARN 2007/11/29_13:42:28,640 [10] Test_log4net.Form1 [(null)] - logger.Warn
ERROR 2007/11/29_13:42:28,640 [10] Test_log4net.Form1 [(null)] - logger.Error
FATAL 2007/11/29_13:42:28,656 [10] Test_log4net.Form1 [(null)] - logger.Fatal
ERROR 2007/11/29_13:42:28,656 [10] Test_log4net.Form1 [(null)] - DATA=AAA/BBB
イベント、コンソール(VS 上 [出力] ウインドウへの出力)へも出力。
設定等はこれからということで、とても便利ですね。