И я тоже один из тех, кто выбрал scalatest
вместо огурца, огурца было слишком много для меня (ME), чтобы написать файл функций, а затем вернуться к файлу scala/java и внести соответствующие изменения. Поддерживать два файла. На самом деле я играл в cucumber java
, scala cucumber
может быть более беглым. В любом случае, мне пока нравится scalatest для всех моих модульных тестов, тестирования компонентов и потокового тестирования.
В случае, подобном вашему, если свойства являются общими для нескольких сценариев, и вы не будете мутировать внутри сценариев, тогда определение общего свойства будет подходящим, как показано ниже.
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)
}
}
}
Но вы также можете использовать тестирование на основе свойств только для часть, которая меняется, проверка на основе свойств была очень быстрой и читабельной в 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"
}
}
Будет два сценария, основанных на двух заданных свойствах:
И для вас тесты будут такими, как показано ниже, на основе свойств, надеюсь, нет ошибки компиляции :)
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)
}
}
}
}
}
22.02.2017