【发布时间】:2016-03-04 05:08:08
【问题描述】:
在我的项目中,我需要在哪里模拟最终课程。
我正在使用 Test-NG 进行单元测试。
我尝试了不同的方法来模拟,但没有成功。我还检查了不同的堆栈溢出帖子。
运行 testng 测试用例时,我遇到错误 -
java.lang.IllegalArgumentException: Cannot subclass final class class com.AskStateParams
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.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:110)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:60)
在 pom.xml 中使用以下依赖项 -
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<optional>true</optional>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-mockito-release-full</artifactId>
<version>1.5.1</version>
<classifier>full</classifier>
</dependency>
TestNG 代码如下 -
@RunWith(PowerMockRunner.class)
@PrepareForTest(AskStateParams.class)
public class TestProcessor17100AAskAmount extends AbstractPowerMockProcessorTest {
@Test
public void test() {
AskStateRequestParams askParams=PowerMockito.mock(AskStateRequestParams.class);
PowerMockito.when(askParams.getCallerInput()).thenReturn("1000");
PowerMockito.when(askParams.getResultCode()).thenReturn("Y");
PowerMockito.when(askParams.getMiString()).thenReturn("P=B");
Assert.assertEquals(baseProcessor.postProcess(requestContext), "amount");
}
}
【问题讨论】:
-
什么是 AbstractPowerMockProcessorTest ?你能分享一下吗?你读过github.com/jayway/powermock/wiki/TestNG_usage 吗?我认为缺少对象工厂。
-
错误本身表明,不能在 JAVA 中对最终类进行子类化。我认为在您的代码中某处您正试图扩展最终类。它不是测试特定的问题。
-
最后一节课是业务需求为了测试,我必须使用 PowerMockito.mock 来模拟最后一节课,但这是失败的。 AbstractPowerMockProcessorTest 只是一个模拟应用程序特定类的类,用于测试目的,以便在不同测试中实现可重用性。问题是无论如何我需要模拟最终课程。
-
@GauravP 您可能会发现以下内容很有帮助:objectpartners.com/2012/03/15/…
标签: mockito testng powermock powermockito