<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
<scope>test</scope>
</dependency>
Я пытаюсь создать макет для одноэлементного перечисления на Java в моем коде Scala, взяв ссылку из здесь и здесь .Я не могу изменить этот синглтон, так как он поступает из какой-то другой библиотеки, некоторый код этого синглтона выглядит следующим образом:
public enum singleton implements Isingleton {
INSTANCE;
public Command getCommand(String name) { <-- method to be mocked
....
}
....
}
Ниже приведена часть кода, но я получаю ошибку:
@RunWith(classOf[PowerMockRunner])
@PrepareForTest(Array(classOf[mySingleTon]))
class myTest {
@Test
def test(): Unit = {
val mockInstance = org.mockito.Mockito.mock[mySingleTon] //val mockInstance = org.powermock.api.mockito.PowerMockito.mock(classOf[mySingleTon])
Whitebox.setInternalState(classOf[mySingleTon], "INSTANCE":String, mockInstance:Any)
when(mockInstance.getAerospikeCommand(nameCapture.capture())).thenReturn(mockedFunc)
Ошибка:
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class com.my.cap.myModule.Singleton
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
at org.scalatest.mock.MockitoSugar$class.mock(MockitoSugar.scala:74)
Я также попытался выполнить следующее, как предлагалось здесь :
@RunWith(classOf[PowerMockRunner])
@PrepareForTest(Array(classOf[mySingleTon]))
class myTest {
@Test
def test(): Unit = {
import org.powermock.api.mockito.PowerMockito
PowerMockito.mockStatic(classOf[mySingleTon])
BDDMockito.given(mySingleTon.INSTANCE.getCommand(nameCapture.capture())).willReturn(mockedCommand)
, но затем я начал получать следующую ошибку:
java.lang.IllegalArgumentException: Cannot subclass final class class com.cap.myModule.mySingleTon
at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)