2017-05-18 6 views
3

Ich versuche, einige Funktionstests in Kotlin zu erstellen, um Anforderungen an einen Cart Java-Dienst unter Verwendung der Rest Assured-Bibliothek zu stellen.Schreibeinheit Tests in Kotlin, gemeinsame Variablen?

Da ich möchte, dass sich die Tests prozedural verhalten, hatte ich gehofft, dass ich das Ergebnis der ersten API-Anfrage speichern und an den nächsten Unit-Test übergeben konnte.

dh

createCartTest() -> cartId -> getCartForWebsiteTest (cartId)

class CartTest : RestAssuredSupport { 

    val port = 8080 
    val url = "http://localhost:" 
    val cartId = null 

    /** 
    * Create a cart object 
    */ 
    @Test fun createCartTest() { 

     given(). 
       now(). 
       body("websiteId=1"). 
       contentType(ContentType.URLENC). 
       post(url + port + "/orders/cart/create.do"). 
       then(). 
       statusCode(200). 
       body("summary.numItems", equalTo(0)). 
       body("summary.visibleNumItems", equalTo(0)). 
       body("summary.cartId", notNullValue()). 
       body("summary.version", notNullValue()) 
    } 

    /** 
    * Fetch a cart object created by websiteId and cartId 
    */ 
    @Test fun getCartForWebsite() { 

     given(). 
       now(). 
       body("websiteId=1&cartId=" + cartId). 
       contentType(ContentType.URLENC). 
       post(url + port + "/orders/cart/getCartForWebsite.do"). 
       then(). 
       statusCode(200). 
       body("summary.numItems", equalTo(0)). 
       body("summary.visibleNumItems", equalTo(0)). 
       body("summary.cartId", equalTo(cartId)). 
       body("summary.version", notNullValue()) 
    } 
} 

nie wirklich Kotlin verwendet, so der Suche nach Beratung in dem, was der beste Weg wäre, alle zu testen, die API-Endpunkte funktionieren.

Oder wäre es besser, eine weitere Anfrage innerhalb der gleichen Funktion zu machen und das Ergebnis an den nächsten Schritt weiterzugeben?

Was ist der beste Weg, Variablen über Tests hinweg zu teilen?

Danke

Antwort

3

JUnit-Tests bieten keine Garantien über die Bestellung Tests und die Tests sollten nicht voneinander abhängig sind, noch auf den freigegebenen Zustand mutieren.

Die einfachste Lösung ist in der Tat, die beiden Anfragen im selben Test durchzuführen.

Sie können auch JUnit test fixtures verwenden, um die Objekte einzurichten, die Sie für eine Reihe von Tests benötigen. Wenn Sie die cartId in mehreren Tests benötigen, ist dies die bevorzugte Option.

class CartTest : RestAssuredSupport { 
    // ... 
    var cartId: Int by Delegates.notNull() 

    @Before fun setUp() { 
     // Set up the cartId. This will run before each test. Use @BeforeClass to run once 
    } 

    @Test fun getCartForWebsite() { /* ... */ } 
} 

Siehe auch: Delegates.notNull(), eine andere question about @Before and @BeforeClass.

2

Komponententests sollen in sich abgeschlossen sein. How to run test methods in specific order in JUnit4?

„Oder wäre es besser, ein weitere Anforderung in der gleichen Funktion zu machen und das Ergebnis an den nächsten Schritt übergeben?“: standardmäßig Sie nicht die Reihenfolge der Ausführung von Unit-Test Werden hier steuern lesen

Das wäre richtig, nennen wir es in der Regel Journey

0

Wenn Sie über viele Tests hinweg allgemeine Setup-Prozeduren haben, würde ich mit den obigen Vorschlägen übereinstimmen, ansonsten sollten Sie jeden Test eigenständig machen. Kotlin kann dies sehr schön machen - siehe https://gjesse.github.io/post/unit-testing-with-kotlin---mini-dsls/ für eine Beschreibung des Umschlingens allgemeiner Operationstypen für einzelne Tests.

Verwandte Themen