2008-09-19 7 views
6

Tengo una FitFile RowFixture que devuelve una lista de objetos comerciales. El objeto tiene un campo que es un flotante que representa un porcentaje entre 0 y 1. El consumidor del objeto comercial será una página web o informe que proviene de un diseñador, por lo que el formato del porcentaje corresponderá al diseñador en lugar del objeto comercial.Formateo de datos en una fila de Fitnesse

Sería mejor si la página pudiera emular al diseñador al convertir el número a un porcentaje, es decir, en lugar de mostrar 0.5, debería mostrar 50%. Pero prefiero no contaminar el objeto comercial con el código de visualización. ¿Hay alguna forma de especificar una cadena de formato en RowFixture?

Respuesta

3

Ciertamente no desea modificar su lógica de negocios solo para que sus pruebas se vean mejor. Buenas noticias, sin embargo, hay una manera de lograr esto que no es difícil, pero no es tan fácil como pasar un especificador de formato.

Trate de pensar en su accesorio como un límite de servicio entre FitNesse y el código de su aplicación. Se desea definir un contrato que no necesariamente tiene que cambiar si los detalles de implementación de su SUT (S istemaT nder T est) el cambio.

veamos una versión simplificada de su objeto comercial:

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

Becuase de la forma en que funciona un RowFixture tenemos que definir un objeto simple que funcionará como el contrato. Normalmente deberíamos usar una interfaz, pero eso no va a servir a nuestro propósito aquí de manera sencilla un DTO (D ata T RANSFERENCIA Object) será suficiente.

algo como esto:

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

Ahora podemos definir un RowFixture que devolverá una lista de nuestros objetos personalizados DTO. También debemos crear una forma de convertir BusinessObjects a ReturnRowDTOs. Terminamos con un accesorio que se ve así.

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

Ahora puede cambiar sus BusinessObjects subyacentes sin romper sus pruebas de ajuste reales. Espero que esto ayude.

0

No estoy seguro de qué es la "polución". O bien el requisito es que su objeto comercial devuelva un valor expresado como un porcentaje, en cuyo caso su objeto comercial debería ofrecer ese -O- está probando el verdadero valor de la respuesta como flotante, que tiene ahora.

Tratando de ponerse en forma para masajear el valor de legibilidad parece un poco extraño.

Cuestiones relacionadas