2017-01-26 5 views
0

У меня есть подобный код:Как добавить метод к издеваться на Скале

class Object3 (
    param1: String 
    param2: String 
) 

class Object1 (
    param1: String 
    param2: Object2 
) extends Message 

class SampleClassSpec extends WordSpec with MockitoSugar { 
    "A sender" should { 
    "send a message" in { 
     val client = mock[Client] 
     var message = mock[Object1] 
     var detail = mock[Object2] 

     when(message.param2).thenReturn(detail) 
     when(message.param2.toJson).thenReturn(detail.toJson) // give me NPE 

     val sender = new Sender(client) 
     sender.prepareandsend(message) // second NPE 
     verify(client).send(message.param2.toJson.prettyPrint) 
    } 
    } 
} 

проблема заключается в том, что я получил NPE, когда я хочу добавить метод, чтобы получить отформатированный JSON, я не хотите отправить весь Object1, просто Object3; Я использую spray.json._ для этого. если я удаляю линию, которая дает мне NPE, то у меня есть второй NPE на «readyandsend»

Мой вопрос в том, как я могу добавить этот метод toJson.prettyPrint к макету? Или, может быть, есть еще один способ сделать это. Я на самом деле новичок в этом.

ответ

0

Try:

when(param2.toJson).thenReturn(detail.toJson) 

вместо этого.

В качестве альтернативы вы можете изучить механизм Mockitos DEEP_STUBS.

+0

я попробовал , тот же NPE. На данный момент быстрое решение создало Object1 с поддельными данными и добавило его на prepareandsend() – armandfp

1

Я ничего не знаю о Scala, но я раньше работал с Mockito. Мне кажется, что проблема в том, что вы не задали какого-либо поведения для деталей. Поскольку это насмешка, а также, это не имеет никакого поведения, поэтому он не будет ничего возвращать, когда вы звоните detail.toJson

Вы должны добавить поведение к деталям с

when(detail.toJson).thenReturn(/* your JSON code */) 
+0

Я тоже новичок, но, например, вы можете сказать мне, почему, если я ставил только .toSting, это работает? Я тоже не дал никакого поведения. – armandfp

+1

Если Scala совпадает с Java, то все классы наследуют от класса Object по умолчанию, который обеспечивает реализацию .toString(), поэтому именно поэтому detail.toString работает – Pox

Смежные вопросы