2008-09-19 5 views
6

J'ai un Fitnesse RowFixture qui renvoie une liste d'objets métier. L'objet a un champ qui est un flottant représentant un pourcentage compris entre 0 et 1. Le consommateur de l'objet métier sera une page Web ou un rapport provenant d'un concepteur. La mise en forme du pourcentage dépend donc du concepteur. plutôt que l'objet métier.Mise en forme des données dans un Fitnesse RowFixture

Il serait plus agréable si la page pouvait émuler le concepteur lors de la conversion du nombre en un pourcentage, c'est-à-dire au lieu d'afficher 0,5, il devrait afficher 50%. Mais je préfère ne pas polluer l'objet métier avec le code d'affichage. Est-il possible de spécifier une chaîne de format dans le RowFixture?

Répondre

3

Vous ne voulez certainement pas modifier votre Business Logic pour que vos tests soient meilleurs. Bonnes nouvelles cependant, il existe un moyen d'accomplir ce qui n'est pas difficile, mais pas aussi facile que de passer dans un spécificateur de format. Essayez de penser à votre dispositif d'ajustement en tant que limite de service entre FitNesse et votre code d'application. Vous souhaitez définir un contrat qui ne doit pas nécessairement changer si les détails de mise en œuvre de votre SUT (S ystème U nder T est) le changement.

permet de regarder une version simplifiée de votre Business Object:

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

Becuase de la façon dont un RowFixture fonctionne, nous devons définir un objet simple qui fonctionnera comme le contrat. Ordinairement nous utiliserions une interface, mais qui ne va pas servir notre but ici si un simple, DTO (D ata T RANSFERT O bjet) suffit.

quelque chose comme ceci:

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

Maintenant, nous pouvons définir un RowFixture qui retourne une liste de nos objets personnalisés DTO. Nous devons également créer un moyen de convertir BusinessObjects en ReturnRowDTOs. Nous nous retrouvons avec un appareil qui ressemble à ceci.

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("%")}; 
     } 
    } 

Vous pouvez maintenant changer BusinessObjects sous-jacents autour sans casser vos tests réels Fit. J'espère que cela t'aides.

0

Je ne suis pas sûr de ce que la "polution" est. Soit l'exigence est que votre objet métier renvoie une valeur exprimée en pourcentage, auquel cas votre objet métier devrait offrir que -OU- vous testez la vraie valeur de la réponse comme float, ce que vous avez maintenant.

Essayer d'obtenir la forme pour masser la valeur pour la lisibilité semble un peu étrange.