Я разрабатываю актора Akka, который отвечает сообщением типа PutAck[Try[String]]
. Проблема не в том, как разработать сам актор, а в юнит-тестах.
Учитывая, что следующий код актора
private def put(store: Map[String, Array[Byte]], key: String, value: Array[Byte]) = {
try {
val newStore = store + (Objects.requireNonNull(key) -> value)
sender ! PutAck(Success(key))
context.become(nonEmptyMap(newStore))
} catch {
case ex: Exception =>
sender ! PutAck(Failure(ex))
}
}
Я хочу проверить это с помощью следующего теста
"A Storekeeper actor" must {
"receive an error message for a couple (null, value)" in {
val sk = TestActorRef[Storekeeper]
sk ! Put(null, SerializationUtils.serialize(42))
expectMsg(PutAck(Failure(new NullPointerException())))
}
}
К сожалению, тест не проходит с сообщением
assertion failed: expected PutAck(Failure(java.lang.NullPointerException)), found PutAck(Failure(java.lang.NullPointerException))
Я предположил, что сбой произошел из-за различийhashCode
в двух исключениях.
Как я могу проверить этот случай?