2008-09-19 70 views
6

我有一個返回業務對象列表的Fitnesse RowFixture。該對象具有一個表示0到1之間的百分比的浮動字段。業務對象的消費者將是來自設計者的網頁或報表,因此百分比的格式將由設計者決定而不是業務對象。在Fitnesse RowFixture中格式化數據

如果頁面可以在將數字轉換爲百分比時仿效設計者,而不是顯示0.5,則它應該顯示50%。但我寧願不用顯示代碼污染業務對象。有沒有辦法在RowFixture中指定格式字符串?

回答

3

您當然不想修改您的業務邏輯,只是爲了讓您的測試看起來更好。好消息是,有一種方法可以做到這一點並不困難,但不像傳入格式說明符那麼簡單。

嘗試將Fit Fixture視爲FitNesse和您的應用程序代碼之間的服務邊界。要定義一個合同,這並不一定需要改變,如果你的SUT小號 ystem ü的nDer 牛逼 EST)變更的實施細節。

讓我們看看你的業務對象的一個​​簡化版本:

public class BusinessObject 
{ 
    public float Percent { get; private set; } 
} 

監守的方式,一個RowFixture工作,我們需要定義一個簡單的對象,將作爲合同。通常我們會用一個接口,但不會爲我所用這裏這麼簡單DTOd ATA 牛逼轉讓(BOT)Ø bject)就足夠了。

是這樣的:

public class ReturnRowDTO 
{ 
    public String Percent { get; set; } 
} 

現在,我們可以定義一個RowFixture將返回我們的定製DTO對象的列表。我們還需要創建一種將BusinessObjects轉換爲ReturnRowDTO的方法。我們最終得到了一個像這樣的Fixture。

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而不會破壞實際的Fit測試。希望這可以幫助。

0

我不確定「污染」是什麼。要麼是要求您的業務對象返回一個以百分比表示的值,在這種情況下,您的業務對象應該提供 - 或者 - 您正在測試響應的真實值作爲float,您現在擁有該值。

試圖讓fitnesse按摩值的可讀性似乎有點奇怪。