質問
ビジネス オブジェクトのリストを返す Fitnesse RowFixture を用意しました。オブジェクトには、0 から 1 までのパーセンテージを表す浮動小数点数のフィールドがあります。の 消費者 ビジネス オブジェクトの割合は、デザイナーが作成した Web ページまたはレポートになるため、パーセンテージの書式設定はビジネス オブジェクトではなくデザイナーに依存します。
数値をパーセンテージに変換するときにページがデザイナーをエミュレートできれば、より良いでしょう。0.5 を表示する代わりに、50% を表示する必要があります。しかし、表示コードでビジネス オブジェクトを汚したくないのです。RowFixture でフォーマット文字列を指定する方法はありますか?
解決
テストの見栄えを良くするためだけにビジネス ロジックを変更する必要はありません。ただし、良いニュースです。これを実現する方法があります。難しくはありませんが、形式指定子を渡すほど簡単ではありません。
Fit Fixture を、FitNesse とアプリケーション コードの間のサービス境界として考えるようにしてください。実装の詳細が変更された場合に必ずしも変更する必要がないコントラクトを定義したいと考えています。 SUT (Sシステム Uだー Test) 変更します。
ビジネス オブジェクトの簡略化されたバージョンを見てみましょう。
public class BusinessObject
{
public float Percent { get; private set; }
}
RowFixture の動作方法のため、コントラクトとして動作する単純なオブジェクトを定義する必要があります。通常はインターフェースを使用しますが、それはここでは目的を果たさないので、単純なインターフェースを使用します。 DTO (Dあた T転送 ○bject)で十分です。
このようなもの:
public class ReturnRowDTO
{
public String Percent { get; set; }
}
これで、カスタム DTO オブジェクトのリストを返す RowFixture を定義できるようになりました。また、BusinessObjects を ReturnRowDTO に変換する方法を作成する必要もあります。最終的には次のようなフィクスチャが完成します。
public class ExampleRowFixture: fit.RowFixture
{
private ISomeService _someService;
public override object[] Query()
{
BusinessObject[] list = _someService.GetBusinessObjects();
return Array.ConvertAll(list, new Converter<BusinessObject, ReturnRowDTO>(ConvertBusinessObjectToDTO));
}
public override Type GetTargetClass()
{
return typeof (ReturnRowDTO);
}
public ReturnRowDTO ConvertBusinessObjectToDTO(BusinessObject businessObject)
{
return new ReturnRowDTO() {Percent = businessObject.Percent.ToString("%")};
}
}
実際のフィット テストを中断することなく、基礎となる BusinessObjects を変更できるようになりました。お役に立てれば。
他のヒント
「汚染」が何なのかは分かりません。要件は、ビジネス オブジェクトがパーセンテージで表現された値を返すことです。その場合、ビジネス オブジェクトはそれを提供する必要があります。または、応答の真の値を浮動小数点としてテストする必要があります。これは現在得られています。
可読性の値を高めるためにフィットネスを取得しようとするのは、少し奇妙に思えます。