You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've been writing a small integration library between JMock and specs2, since we love JMock here at Wix, but we write mostly in Scala now.
I encountered an issue where the JavaReflectionImposteriser would fail to create a mock from a Scala trait that contains a function that returns a Scala Set.
It fails because the Imposteriser uses JDKs Proxy which is unable to create the instance. This is due to Set having two apply methods:
apply(T):Boolean
and
apply(T*:):CC[T]
Since Java ignores Scala's way of creating parameter lists, it things both methods have the same signature but with different return types.
I have worked around this by creating a new Imposteriser, which uses the JavaReflectionImposteriser, and if it fails because of that error, uses the ClassImposteriser instead.
I just thought you guys might find this interesting.
The text was updated successfully, but these errors were encountered:
You're correct, this is more of an issue with Scala-Java interop, but I just thought it had some bearing here, perhaps for documentation purposes.
I do like that the JavaReflectionImposteriser is the default and that using the ClassImposteriser has to be a conscious decision, since it doesn't work on Classes, and reminds me that I should strive to use mocking on interfaces, rather than concrete classes.
Hi,
I've been writing a small integration library between JMock and specs2, since we love JMock here at Wix, but we write mostly in Scala now.
I encountered an issue where the
JavaReflectionImposteriser
would fail to create a mock from a Scala trait that contains a function that returns a Scala Set.It fails because the Imposteriser uses JDKs Proxy which is unable to create the instance. This is due to Set having two apply methods:
and
Since Java ignores Scala's way of creating parameter lists, it things both methods have the same signature but with different return types.
I have worked around this by creating a new
Imposteriser
, which uses theJavaReflectionImposteriser
, and if it fails because of that error, uses theClassImposteriser
instead.I just thought you guys might find this interesting.
The text was updated successfully, but these errors were encountered: