tokuhirom's Blog

java.util.Random が mockito でモックできないとき

ExponentialBackoffTest > test() FAILED
    org.mockito.exceptions.base.MockitoException: 
    Mockito cannot mock this class: class java.util.Random.

    Mockito can only mock non-private & non-final classes.
    If you're not sure why you're getting this error, please report to the mailing list.


    Java               : 17
    JVM vendor name    : Eclipse Adoptium
    JVM vendor version : 17.0.2+8
    JVM name           : OpenJDK 64-Bit Server VM
    JVM version        : 17.0.2+8
    JVM info           : mixed mode
    OS name            : Mac OS X
    OS version         : 12.3

こういうエラーがでていた。

ネットを探すと --add-opens をつけろという記事が多いのだが、実はmock(Random.class, withSettings().withoutAnnotations()) とすれば良いようだ。

https://stackoverflow.com/questions/70993863/mockito-can-not-mock-random-in-java-17/70994194#70994194

問題が起きていた pyroscope-java については、PR を出して修正済み。 https://github.com/pyroscope-io/pyroscope-java/pull/26