私はこの非常によく似た質問への回答で提供された例に従おうとしましたが、それは私にはうまくいきません。次のエラーメッセージが表示されます。
Java.lang.IllegalArgumentException: Cannot subclass final class class com.myproject.test.support.ExampleEnumerable
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)
at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.Java:123)
at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.Java:57)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.Java:110)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.Java:58)
at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.Java:143)
enum class
の単純なモックインスタンスが必要です。そのメソッドをモックする必要はありません。
これが私がモックしたいクラスです:
public enum ExampleEnumerable implements IEnumerable<ExampleEnumerable> {
EXAMPLE_ENUM_1("Test Enum 1"),
EXAMPLE_ENUM_2("Test Enum 2");
final String alias;
ExampleEnumerable(final String alias) {
this.alias = alias;
}
@SuppressWarnings({"VariableArgumentMethod", "unchecked"})
@Override
public @Nullable
String getAlias(final @Nonnull IEnumerable<? extends Enum<?>>... context) {
return alias;
}
}
次のTestNGセットアップがあります。
import static org.powermock.api.mockito.PowerMockito.mock;
@PrepareForTest({ ExampleEnumerable.class})
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest {
private ExampleEnumerable mockEnumerable;
@BeforeMethod
public void setUp() {
mockEnumerable = mock(ExampleEnumerable.class);
}
}
TestNG用にこの種のものを処理するPowerMockTestCaseクラスを拡張することで、これを機能させました。
@PrepareForTest(TestEnumerable.class)
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest extends PowerMockTestCase {
private TestEnumerable mockEnumerable;
@SuppressWarnings("unchecked")
@BeforeMethod
public void setUp() {
mockEnumerable = PowerMockito.mock(TestEnumerable.class);
}
}
PowerMockRunnerでこれを実行する必要があります
例えば。
@RunWith(PowerMockRunner.class)
@PrepareForTest({ ExampleEnumerable.class})
@Test(groups = {"LoadableBuilderTestGroup"})
public class LoadableBuilderTest {
private ExampleEnumerable mockEnumerable;
@BeforeMethod
public void setUp() {
mockEnumerable = mock(ExampleEnumerable.class);
}
}