Semantic class classes with primitive types

Consider the following type structure:

trait HasId[T] { def id: T } case class Entity(id: Long) extends HasId[Long] 

Let's say we want the Entity class to be mocked in one test.

 val entityMock = mock[Entity] Mockito.when(entityMock.id).thenReturn(0) 

Reproduction of such test results when throwing a NullPointerException (in the second line), possibly due to scala behavior of the compiler with common primitive types (if we replace Long with String, the test runs correctly).

 An exception or error caused a run to abort. java.lang.NullPointerException at com.test.Entity$MockitoMock$1085095743.id(Unknown Source) at com.test.Test.<init>(Test.scala:23) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at org.scalatest.tools.Runner$.genSuiteConfig(Runner.scala:1422) at org.scalatest.tools.Runner$.$anonfun$doRunRunRunDaDoRunRun$8(Runner.scala:1236) 

This error only affects the case and mockito classes in versions 2.X.

Is there any known solution to solve this problem?

UPDATE: a problem occurs in versions above 2.0.8 beta

+5
source share
1 answer

Here is my test class:

 import org.mockito.Mockito._ import org.scalatest.mockito.MockitoSugar import org.scalatest.FlatSpec class StackOverflowTest extends FlatSpec with MockitoSugar { "Bla" should "fsg ll ll" in { val entityMock = mock[Entity] when(entityMock.id).thenReturn(0) foo(entityMock) } def foo(entity: Entity) = { entity.id == 0 } } trait HasId[T] { def id: T } case class Entity(id: Long) extends HasId[Long] 

Here is my sbt file:

 name := "scalaExperiments" version := "0.1" scalaVersion := "2.12.4" libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.4" % Test libraryDependencies += "org.mockito" % "mockito-all" % "2.0.2-beta" % Test 

It compiles and passes successfully.

+1
source

Source: https://habr.com/ru/post/1275135/


All Articles