2017-02-22 5 views
1

I'm реализация моей тестовой базы с помощью scalatest, и я думаю, что я сделал ошибку, используя эту схему вместо огурцаСценарий плана в scalatest

я пытаюсь использовать какое-то функцию, как Scenario outline огурца, чтобы избежать перерыва DRY

здесь моя проблема

feature("Features of mus client") { 
    scenario("GET message with mus client") { 
     Given("a Musin message") 
     val config: Properties = new Properties 
     config.put("method", "POST") 
     config.put("encoding", "UTF-8") 
     config.put("uri", "http://localhost:9083/musClient") 
     When("I make a request to f2e") 
     val response = HttpClientTest.request(config, createJSON(READ)) 
     Then("The message it´s returned successfully") 
     assert(response != null) 
    } 

    scenario("POST message with mus client") { 
     Given("a Musin message") 
     val config: Properties = new Properties 
     config.put("method", "POST") 
     config.put("encoding", "UTF-8") 
     config.put("uri", "http://localhost:9083/musClient") 
     When("I make a request to f2e") 
     val response = HttpClientTest.request(config, createJSON(CREATE)) 
     Then("The message it´s returned successfully") 
     assert(response != null) 
    } 

Как вы можете видеть, у меня есть два сценария, где 99% подмигнул те же действия, но переменные, изменить запрос.

Любая идея, как сделать это элегантный и эффективный в scalatest

ответ

1

И я один из тех, кто выбрал слишком scalatest над огурца, огурец было слишком много для меня (ME) для записи файла функции, а затем вернитесь к файлу scala/java и соответствующим образом измените. Поддерживайте два файла. Я на самом деле играл cucumber java, scala cucumber может быть более свободно. Во всяком случае, мне до сих пор нравится скатать для всех моих модульных испытаний, тестирования компонентов и тестирования потока.

В случае, если у вас есть общие свойства для нескольких сценариев, и вы не будете мутировать внутри сценариев, тогда определение как общего свойства будет прекрасным, как показано ниже.

class E2E extends FeatureSpec with GivenWhenThen { 
    feature("Features of mus client") { 

    Given("http config") 
    val config: Properties = new Properties(){{ 
     put("method", "POST") //you are doing POST in both case by the way 
     put("encoding", "UTF-8") 
     put("uri", "http://localhost:9083/musClient") 
    }} 

    scenario("GET message with mus client") { 

     When("I make a request to f2e") 
     val response = HttpClientTest.request(config, createJSON(READ)) 

     Then("The message it´s returned successfully") 
     assert(response != null) 
    } 

    scenario("POST message with mus client") { 

     When("I make a request to f2e") 
     val response = HttpClientTest.request(config, createJSON(CREATE)) 

     Then("The message it´s returned successfully") 
     assert(response != null) 

    } 
    } 
} 

Но, Вы также можете использовать property based testing для единственной части, которая изменяется, свойство проверки на основе было очень свободно и читаемым в spock framework.

Проверка свойств на основе свойств в scalatest будет выглядеть ниже, где я тестирую два разных входных параметра. (Вы нужду import org.scalatest.prop.TableDrivenPropertyChecks._)

class TestE2E extends FeatureSpec with GivenWhenThen { 

    val requestResponse = 
    Table(
     ("request", "response"), 
     ( "GET", "GET-something"), 
     ("POST", "POST-something") 
    ) 

    feature("testMe") { 

    forAll (requestResponse) { (givenRequestFromTable: String, expectedResponseFromTable: String) => 

     scenario("for input " + givenRequestFromTable) { 

     When("input is " + givenRequestFromTable) 
     val output = testMe(input = givenRequestFromTable) 

     Then("responseFromTable has something appended to it") 
     assert(output == expectedResponseFromTable) 
     } 
    } 
    } 

    def testMe(input: String) : String = { 
    input + "-something" 
    } 
} 

Там будет два сценария на основе двух заданных свойств, two tests

И для вас, испытания были бы что-то, как показано ниже с собственностью на основе, надеюсь, что нет никакой ошибки компиляции:)

import org.scalatest.prop.TableDrivenPropertyChecks._ 
import org.scalatest.prop.Tables.Table 
import org.scalatest.{FeatureSpec, GivenWhenThen} 

class PaulWritesSpecs extends FeatureSpec with GivenWhenThen { 

    val requestResponse = 
    Table(
     ("httpMethod", "requestType"), 
     ("GET", READ), 
     ("POST", CREATE)) 

    feature("Features of mus client") { 

    forAll(requestResponse) { (httpMethod: String, requestType: String) => { 

     scenario(s"$httpMethod message with mus client") { 

      Given("http config") 
      val config: Properties = new Properties() {{ 
      put("method", httpMethod) 
      put("encoding", "UTF-8") 
      put("uri", "http://localhost:9083/musClient") 
      }} 

      When("I make a request to f2e") 
      val response = HttpClientTest.request(config, createJSON(requestType)) 

      Then("The message it´s returned successfully") 
      assert(response != null) 
     } 
     } 
    } 
    } 
} 
Смежные вопросы