Frage

Ich habe ein Fitnesse RowFixture bekam, die eine Liste von Business-Objekten zurückgibt. Das Objekt verfügt über ein Feld, das einen Schwimmer darstellt einen Prozentsatz zwischen 0 und 1. Der Verbraucher des Business-Objekt wird eine Web-Seite oder berichten, dass von einem Designer kommt, so dass die Formatierung des Prozentsatz bis zu dem Designer anstatt das Business-Objekt.

Es wäre schöner, wenn die Seite mit dem Designer emulieren könnte, wenn die Zahl auf einen bestimmten Prozentsatz Umwandlung, das heißt, statt 0,5 anzuzeigen, sollte es 50% angezeigt werden soll. Aber ich würde lieber nicht das Business-Objekt mit dem Display Code verschmutzt. Gibt es eine Möglichkeit, einen Format-String in den RowFixture angeben?

War es hilfreich?

Lösung

Sie wollen sicher nicht Ihre Business-Logik ändern, nur die Tests besser aussehen zu machen. Gute Nachrichten gibt es aber eine Möglichkeit, dies zu erreichen, die nicht schwer ist, aber nicht so einfach wie in einem Formatbezeichner geben.

Versuchen Sie Ihren Fit Fixture als Service Grenze zwischen FitNesse und Anwendungscode zu denken. Sie wollen einen Vertrag definieren, die sich ändern muss nicht unbedingt an, wenn die Details der Implementierung der SUT ( S ystem U nder T est) zu ändern.

Hier kann bei einer vereinfachten Version des Business Object aussehen:

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

Becuase der Art und Weise, dass ein RowFixture funktioniert brauchen wir ein einfaches Objekt zu definieren, die als Vertrag arbeiten. Normalerweise würden wir eine Schnittstelle verwenden, aber das ist nicht unsere Absicht, gehen zu dienen hier so ein einfaches DTO ( D ata T ransfer O bject) genügt.

Etwas wie folgt aus:

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

Jetzt können wir eine RowFixture definieren, die eine Liste unserer benutzerdefinierten DTO Objekte angezeigt werden können. Wir brauchen auch eine Art und Weise erstellen Business zu ReturnRowDTOs zu konvertieren. Wir am Ende mit einem Fixture, die etwa wie folgt aussieht.

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

Sie können nun Ihr zugrunde liegendes Business um ändern, ohne Ihre aktuellen Fit Tests zu brechen. Hoffe, das hilft.

Andere Tipps

Ich bin mir nicht sicher, was die „polution“ ist. Entweder ist die Voraussetzung ist, dass Ihr Business Object Wert, ausgedrückt als Prozentsatz zurückkehrt, in dem Fall, dass Ihr Business-Objekt bieten soll, dass -ODER- Sie den wahren Wert der Antwort als Schwimmer testen, die Sie jetzt haben.

Der Versuch, FitNesse erhalten den Wert für die Lesbarkeit zu massieren scheint ein wenig seltsam.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top