テストの見栄えを良くするためだけにビジネスロジックを変更したくないことは確かです。朗報ですが、これを実現する方法は難しくありませんが、フォーマット指定子を渡すほど簡単ではありません。
Fit Fixtureは、FitNesseとアプリケーションコードの間のサービス境界と考えてください。SUT(S ystem U nder T est)の実装の詳細が変更された場合に、必ずしも変更する必要のないコントラクトを定義する必要があります。
ビジネスオブジェクトの簡略化されたバージョンを見てみましょう。
public class BusinessObject
{
public float Percent { get; private set; }
}
RowFixtureが機能する方法のため、コントラクトとして機能する単純なオブジェクトを定義する必要があります。通常はインターフェースを使用しますが、ここでは目的を果たせないため、単純なDTO(D ata T ransfer O 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("%")};
}
}
これで、実際のフィットテストを中断することなく、基になるBusinessObjectを変更できます。お役に立てれば。