簡體   English   中英

Specs2-模擬方法內部的對象

[英]Specs2 - Mock objects inside method

我正在編寫單元測試,我想知道是否有可能模擬我正在測試的方法內部實例化的對象。

這是我要測試的方法的示例:

def sendMessageToBroker(message:Message) = {

  val soapBody = xmlBody("user", "pass", message.identifier, 
      message.to, message.message)

  val response = new WebServiceUtil().doPost("uri", soapBody.toString(),
  "text/xml; charset=utf-8", "action")

  response
} 

我想知道是否可以做類似的事情:

when call doPost, return new Response(200, 'Success')

可能嗎?

我試過使用spy()和模擬,但沒有成功:

val ws = new WebServiceUtil

val spiedObj = spy(ws)
spiedObj.doPost("uri", xml,
  "text/xml; charset=utf-8",
  "action") returns new Response(200, "Success")

val xx = messageService.sendMessageToBroker(new Message())

關於我該怎么辦的任何想法?

你可以寫

val webService = mock[WebServiceUtil]

webService.doPost("uri", xml, "text/xml; charset=utf-8", "action") returns 
   new Response(200, "Success")

// pass the mock webservice as an argument
sendMessageToBroker(new Message, webService)

重要的是,您需要能夠將模擬WebServiceUtil傳遞給要測試的方法! 有很多方法可以做到這一點。 最簡單的方法是將實例傳遞給我們“被測類”的構造方法:

class MyClass(webService: WebServiceUtil) {
  def sendMessageToBroker(message: Message) = {
    // use the webservice
  }
}

一種更復雜的方法是使用Guice和Inject批注來傳遞服務(特別是因為您將問題標記為play-framework-2.0 )。 然后,您將有興趣關注此SOF問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM