मैं उन परीक्षणों को फिर से लिख रहा हूं जो एक अक्का अभिनेता का परीक्षण करते थे जो एक स्ट्रिंग के साथ प्रतिक्रिया करता था, अभी, हम एक फ़ंक्शन का उपयोग करते हैं जो एक Future[String] देता है। तो AsyncFunSuiteLike का उपयोग करके परीक्षणों को फिर से लिखना।

वर्तमान में मैं एक परीक्षण देख रहा हूं जिसमें कई फ्यूचर्स का दावा करना है, लेकिन मुझे यह समझ में नहीं आता कि इसे AsyncFunSuiteLike के साथ कैसे प्राप्त किया जाए।

मेरा परीक्षण इस प्रकार दिखता है:

test("Error responses") {

    NanoHTTPD.Response.Status.values().filter(status => status.getRequestStatus >= 400).map {
      status => {
        val statusCode = status.getRequestStatus
        httpService.setStatusCode(status)
        val responseBody = s"Request failed with status $status"
        httpService.setResponseContent(responseBody)
        val errorMessage = s"Error response (${status.getRequestStatus}): $responseBody"

        myobject.request("123456").map {
          resp => assert(resp === "....")
        }
      }
    }

}

लेकिन मुझे एक त्रुटि मिल रही है type missmatch. Expected: Future[Assertion] actual: List[Future[scalatest.Assertion]]

इस तरह के एक परीक्षण के भीतर मैं एकाधिक दावे कैसे प्राप्त कर सकता हूं इस पर कोई विचार?

5
Fede E. 4 अक्टूबर 2018, 23:59

1 उत्तर

सबसे बढ़िया उत्तर

ScalaTest एसिंक्रोनस टेस्टिंग उम्मीद करता है कि टेस्ट बॉडी Future[Assertion] वापस आ जाएगी। अब आपका परीक्षण निकाय List[Future[Assertion]]] लौटाता है क्योंकि

NanoHTTPD.Response.Status.values() ... // Returns List
  ...
    myobject.request("123456").map(resp => assert(resp === "....")} // Returns Future[Assertion]
  ...
}

हम List[Future[T]] को Future[List[T]] का उपयोग करके परिवर्तित कर सकते हैं

Future.sequence(listOfFutures)

और, हम List[Assertion] को Assertion का उपयोग करके परिवर्तित कर सकते हैं

assert(listOfAssertions.forall(_ == Succeeded))

इसे एक साथ रखने पर हमें मिलता है

Future.sequence {
  NanoHTTPD.Response.Status.values().filter(status => status.getRequestStatus >= 400).map {
    status => {
      val statusCode = status.getRequestStatus
      httpService.setStatusCode(status)
      val responseBody = s"Request failed with status $status"
      httpService.setResponseContent(responseBody)
      val errorMessage = s"Error response (${status.getRequestStatus}): $responseBody"

      myobject.request("123456").map {
        resp => assert(resp === "....")
      }
    }
  }
}.map(listOfAssertions => assert(listOfAssertions.forall(_ == Succeeded)))
9
Mario Galic 5 अक्टूबर 2018, 00:27