Bhu*_*van 7 java junit4 mockito powermock maven
我已经将JUnit中的PowerMock和PowerRule与Mockito集成在一起.
这是我的依赖项:
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.0.GA</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.powermoc</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<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-rule</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-objenesis</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我的测试类是:
public class TestClass extends AbstractShiroTest{
@Rule
public PowerMockRule rule = new PowerMockRule();
@Autowired
SomeService someService;
@Before
public void setUp(){
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("userTimeZone", "Asia/Calcutta");
Subject subjectUnderTest = mock(Subject.class);
when(subjectUnderTest.getPrincipal()).thenReturn(LMPTestConstants.USER_NAME);
Session session = mock(Session.class);
when(session.getAttribute(LMPCoreConstants.USER_DETAILS_MAP)).thenReturn(newMap);
when(subjectUnderTest.getSession(false)).thenReturn(session);
setSubject(subjectUnderTest);
PowerMockito.mockStatic(CasSessionUtil.class);
when(CasSessionUtil.getCarrierId()).thenReturn(1L);
}
@Test
public void myTestMethod() {
someService.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
doSomething正在调用我需要模拟的静态方法.当我运行我的测试用例时,我得到了javassist.NotFoundException: $Proxy88.
完整堆栈跟踪:
了java.lang.RuntimeException:javassist.NotFoundException:$ Proxy88在org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:187)在org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:147)在org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:67)在java.lang.ClassLoader.loadClass(ClassLoader.java:252)在java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)在位于org.powermock的org.powermock.api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:66)java.lang.Class.forName(Class.java:247)的java.lang.Class.forName0(Native Method).位于org.powermock.classloading.DeepCloner.cloneFields(DeepCloner.java:243)的ori.powermock.classloading.DeepCloner.performClone(DeepCloner.java:128)的api.support.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:26) org.powermock.classloading.DeepCloner.perform中的.powermock.classloading.DeepCloner.cloneFields(DeepCloner.java:248)克隆(DeepCloner.java:128)org.powermock.classloading.DeepCloner.cloneFields(DeepCloner.java:248)org.powermock.classloading.DeepCloner.performClone(DeepCloner.java:128)atg.powermock.classloading.DeepCloner .cloneFields(DeepCloner.java:248)org.powermock.classloading.DeepCloner.performClone(DeepCloner.java:128)位于org.powermock.classloading的org.powermock.classloading.DeepCloner.cloneFields(DeepCloner.java:248).在org.powermock.classloading的org.powermock.classloading.DeepCloner.peroneClone(DeepCloner.java:128)的org.powermock.classloading.DeepCloner.cloneFields(DeepCloner.java:248)中的DeepCloner.performClone(DeepCloner.java:128) .deepCloner.cloneFields(DeepCloner.java:248)位于org.powermock的org.powermock.classloading.DeepCloner.performClone(DeepCloner.java:128)org.powermock.classloading.DeepCloner.clone(DeepCloner.java:82). classload.DeepCloner.clone(DeepCloner.java:69)org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:89)at org.powermock.classloading.ClassloaderExecutor.execute(ClassloaderExecutor.java:78)位于org.springframework.test.context.junit4.statements.SpringRepeat的org.powermock.modules.junit4.rule.PowerMockStatement.evaluate(PowerMockRule.java:49).在org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)在org.junit评估(SpringRepeat.java:72) .runners.ParentRunner $ 3.run(ParentRunner.java:193)org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)at at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42)位于org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks的org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184).在org.junit.internal.runners.statements.RunAfters.evaluate评估(RunBeforeTestClassCallbacks.java:61)(RunAfters.java:31 )在org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)在org.junit.runners.ParentRunner.run(ParentRunner.java:236)在org.springframework.test.context. junit4.SpringJUnit4ClassRunner.run在org.eclipse.jdt.internal.junit.runner.TestExecution(SpringJUnit4ClassRunner.java:174)在org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50).运行(TestExecution.java:38)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner. java:683)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)引发者:javassist.NotFoundException:$ proxy88 at javassist.ClassPool.get(ClassPool.java:436)at org.powermock.core.classloader.MockClassLoader.loadUnmockedClas s(MockClassLoader.java:180)......还有46个
如果我将依赖项更改为
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-classloading-xstream</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后我得到一个不同的例外.请参阅/sf/ask/852323461/(删除SO问题,需要10k).
我甚至尝试过使用javassist 15版本,但这有同样的问题.
自己找到了解决方案:
仅使用以下依赖项(适用于Power Mock和Power Rule)
<!-- Required for PowerMock -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
<!-- Required for PowerMockRule -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule-agent</artifactId>
<version>1.4.12</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
现在我没有得到上述任何一个例外
| 归档时间: |
|
| 查看次数: |
17829 次 |
| 最近记录: |