(コーディングはWindows環境下でやっていたので、途中にWindowsでの手順含む。スイマヘン;)
前提条件: Java と.NET Core のSDKはインストール済
FitNesseのインストール:
FitNesse は、”fitnesse-standalone.jar” と Javaさえあれば、動作する。配置するフォルダは、任意で問題ない。Windows でも同様。。
実行コマンド:
cd /usr/local/bin
mkdir fitnesse
cd fitnesse
wget "http://fitnesse.org/fitnesse-standalone.jar?responder=releaseDownload&release=20180127" -O fitnesse-standalone.jar
※念のため:fitnesse-standalone.jar を配置するフォルダは上記以外の場所でも問題ないです※
FitNesse起動:
java -jar fitnesse-standalone.jar -p 8989
-p で指定しているポート番号で動作します。上記の番号は適当です。空いてる番号であれば、何でも良い。
アクセス:
http://(貴方のIP):8989
こんな感じに表示されるはず:
FitSharp向けプロジェクトのセットアップ
.NET Core でビルドされているプロジェクトであれば、FitSharp でテストケースを実行できるはず。
(ここだけWindows;)
プロジェクトに必要な設定など
依存関係で、 Nuget パッケージの FitSharp を追加する。
プロジェクトの「依存関係」を右クリック > NuGetパッケージの管理をクリック
開いたウィンドウで参照をクリックして、「FitSharp」と入力して、選択:
右側で「インストール」をクリック
動作確認向けに、テストクラスを作る
fit.XXXXFixture みたいなクラスを必要に応じて継承したクラスを作る。
FitSharp の XXXFixture の説明は以下ページ:
とりあえず、動作確認さえできれば良いという程度のものを。。
例)
public class Class1 : fit.ColumnFixture
{
public int value1;
public int value2;
public int Add()
{
return value1 + value2;
}
}
FitNesse 向けの設定ファイルを作る
プロジェクト直下に、FitSharp実行向けの設定を保持する.xmlファイルを作る。
ここでは適当に「mysuiteconfig.xml」とゆー名前で作ったものと仮定する。。
こんな中身:
<?xml version="1.0" encoding="utf-8" ?>
<suiteConfig>
<ApplicationUnderTest>
<AddAssembly>(プロジェクトまでのパス)/bin/Debug/netcoreapp2.1/(プロジェクト名).dll</AddAssembly>
<AddNamespace>(テスト対象の名前空間名)</AddNamespace>
</ApplicationUnderTest>
<Settings>
<Runner>fitnesse.fitserver.FitServer</Runner>
</Settings>
</suiteConfig>
ここで、最低限、テスト対象のアセンブリのパスと、FitSharpのテストランナーを指定する必要がある。パスは、FitNesseを実行する環境のパスを記載のこと。
ここまでに作ったプロジェクトを、FitNesse を置いた環境に持っていき、ビルド。
ソリューションを配置しているフォルダまで cd で移動して、dotnet build
を実行で、ビルドができる。FitNesseで試験向けのページ追加
FitNesse 上のWikiページで「Add > TestPage」をクリック
ページの内容(作成例):
!define COMMAND_PATTERN {%m (FitSharpの配置されているディレクトリ)/Runner.dll -c (プロジェクトのディレクトリ)/mysuiteconfig.xml %p}
!define TEST_RUNNER {dotnet}
|Class1|
|value1|value2|Add?|
|10 |2 |12 |
|12 |3 |15 |
|100 |4 |104 |
※補足:
FitSharp の dll は、ビルドしたならば以下辺りにあるはず:
Ubuntu:
$HOME/.nuget/packages/fitsharp/2.7.0/lib/netcoreapp2.0/
Win:
%HOMEPATH%\.nuget\packages\fitsharp\2.7.0\lib\netcoreapp2.0
Ubuntu:
$HOME/.nuget/packages/fitsharp/2.7.0/lib/netcoreapp2.0/
Win:
%HOMEPATH%\.nuget\packages\fitsharp\2.7.0\lib\netcoreapp2.0
全てが正しく設定されていれば、左上の「Test」リンクをクリックで、テストが実行されるはず。。
なのだが、FitSharp 2.7.0時点で、Ubuntu18.04(Hyper-V上のVM)では正しく動かなかった。"fit.dll"が正しくロードされないとか、そんなエラーが起きている方は、下に記載した蛇足の情報が参考になる…かも。
参考:
FitSharp の設定を説明したページ:
蛇足の情報:UbuntuではFitSharpが簡単には動かなかった
発生した現象:
Windows 環境下では,NET Coreで動作させることが出来たが、 どうも、 Ubuntu18.04(Hyper-V上のVM)環境下では、うまくテストを実行できなかった。(fit.dll のアセンブリを読み込に失敗したようなエラーが起きる) 。多分、FitSharp version2.7.0固有の問題。
とりあえずの対応方法:
FitNesse を起動しているフォルダ配下に FitSharp のdllをコピーして置いてしまう。
簡単な例)
FitSharp のdll が保存されてる場所:
/home/hoge/.nuget/packages/fitsharp/2.7.0/lib/netcoreapp2.0/
FitNesseを実行したフォルダ:
/usr/local/bin/fitnesse
以下にfitSharpのdll(fit, fitSharp, Runner)をコピーする:
/usr/local/bin/fitnesse/home/hoge/.nuget/packages/fitsharp/2.7.0/lib/netcoreapp2.0/
/usr/local/bin/fitnesse/home/hoge/.nuget/packages/fitsharp/2.7.0/lib/netcoreapp2.0/
上記のようにFitNesse実行中のフォルダに対応するフォルダを作ってdllをコピーすれば、動くことは動くはず。
原因(多分):
ApplicationUnderTestクラスの内部クラスAssembliesクラスの AddAssembly メソッドで、 Windows 環境専門のロジックになっているから??
この部分:
var assemblyName = name.StartsWith("file:///") ? name.Substring(8) : name;
上記コードの”name”にはアセンブリのCodeBase の中身が設定されるが、自環境ではCodeBaseは以下のように戻ってきた(パスの中身は気にしないで):
Win:
file:///C:/Users/mgggt/sources/fitsharp-master/source/netcore/Runner/bin/Debug/netcoreapp2.0/fit.dll
Ubuntu(Hyper-V上のVM):
file:///var/lib/jenkins/workspace/DotNetCoreWebSample/FTest/fs/fit.dll
0ベースの8文字目スタートだと、Ubuntu側が相対パス扱いになって、正しく読み取れない。で、エラーになる(んだと思う。VMとかその他環境要因があるかは調べてない)。
その他対応案:
エラーの原因(?)になっていると思われる name.substring(8) を new Uri(name).LocalPath に置き換え、ビルドして.dll作り直すのが一番楽と言う気がした。。
(一応動作することは確認)
こうする:
var assemblyName = name.StartsWith("file:///") ? new Uri(name).LocalPath : name;
参考情報:
上記のパス変換方法をこたえていた回答部分: