나는 메이븐없이 RCP-이클립스 응용 프로그램 을 테스트하기 위해 이클립스에서 JUnit을-테스트를 쓰고 있어요. 일부 테스트 케이스의 경우, Powermock (Easymock 포함)을 사용하여 객체 생성 및 정적 메소드를 모방해야합니다.세 번째 (플러그인)에서 참조 할 때 Powermock가, 이클립스의 JUnit 플러그인 테스트를 위해 ClassNotFoundException가 리드
나는 testet이어야하는 클래스와 해당 테스트가 포함 된 두 번째 플러그인을 포함하는 플러그인을 가지고있다. 의 그들을 기부합시다 PluginObject 및 PluginTest :
근무 상황 :
* PluginObject
- src
- ClassUnderTest
* PluginTest
- src
- TestCase
- lib
- easymock
- powermock
- ... [aditional classes (like JavaAssist)]
테스트 케이스 PLuginTest에서 powermock - 항아리로 구성 및 플러그인 - 매니페스트 - Runtim 구성 정상 실행하고 원하는 결과를 반환 .
내 TestCase에 현재 @RunWith -Annotation를 사용하여 다음 라인으로 시작 :
@RunWith(PowerMockRunner.class)
@PowerMockIgnore({ "javax.management.*",
"javax.xml.parsers.*",
"com.sun.org.apache.xerces.internal.jaxp.*",
"javax.xml.*",
"ch.qos.logback.classic.*",
"org.slf4j.*",
"org.eclipse.core.runtime.jobs.ISchedulingRule" })
@PrepareForTest ({Controller.class,ProcessLoaderFactory.class,Engine.class,CommandCollector.class})
@SuppressStaticInitializationFor({"Controller"," ProcessLoaderFactory","Engine","CommandCollector"})
public class ControllerTest {
...
[skipped package information due to copyrights]
하지만, 내 응용 프로그램에서 조롱에 대한 Powermock를 사용하려면 여러 플러그인이 그것을 그 나에게 또 다른 특별한 플러그인에 공유 라이브러리를 좋은 아이디어를 추출하는 것 같다 위해 - Test.Util 현실을 부르 자 모든 들어
* PluginObject
- src
- ClassUnderTest
* PluginTest
- src
- TestCase
* Test.Util
- lib
- easymock
- powermock
- ... [aditional classes (like JavaAssist)]
Powermock을 제외한 다른 라이브러리 나는 아무런 문제가 없다.하지만 Powellock을 PluginTest에서 Test.Util-Plugin으로 옮길 때 JUnit PLugin-Test를 시작할 때 초기화 중에 "ClassNotFoundException"이 발생한다.
java.lang.ClassNotFoundException: xxx.yyy.zzz.MyTest
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:143)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:67)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:133)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:39)
at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.createTestDelegators(AbstractTestSuiteChunkerImpl.java:217)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:59)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32)
at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:31)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62)
at org.eclipse.pde.internal.junit.runtime.PlatformUITestHarness$1.run(PlatformUITestHarness.java:47)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication.runApp(NonUIThreadTestApplication.java:54)
at org.eclipse.pde.internal.junit.runtime.UITestApplication.runApp(UITestApplication.java:41)
at org.eclipse.pde.internal.junit.runtime.NonUIThreadTestApplication.start(NonUIThreadTestApplication.java:48)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
은 내가 MANIFEST.MF에 런타임에서
클래스 경로에 라이브러리로 Test.Util을 구성하고 이러한 플러그인의 모든 패키지를 수출 (A 정상의 JUnit 테스트는이 오류가 발생하지 않습니다). Eclipse에서 올바른 라이브러리는 TestCase에서 링크됩니다. 또한 @ RunWith 대신 JUnit-Rule을 사용하여 부트 스트랩을 사용했지만 동일한 ClassNotFoundException이 발생합니다. 문제는 변하지 않았습니다.
플러그인 테스트의 실행 구성을 다시 구성하고 매니페스트, 지연/비 지연로드시 ClassPath :. \를 설정하고 PluginTest 및 테스트에 대한 Buddy-ClassLoading을 설정했습니다. Util-Plugin.
웹에서 시도하고 검색 한 후에도 Powellock이 Test-Plugin에서 추출한 플러그인을 세 번째 플러그인으로 추출한 경우 Powermock이이 예외로 이어지는 이유는 아직 없습니다. 내 응용 프로그램에서 잘못 구성된 것이 있다면 현재 말할 수 없습니다.
동일하거나 유사한 문제가 발생했거나 해결 방법이 좋은 사람은 누구입니까?
Interesing를 참조하십시오
, 당신은 PowerMock 내 보낸 클래스를 조작 할 경우에만 수있는 이유를 설명 할 수 있습니까? 현재 나의 이해는 모든 패키지가 빌드/컴파일시에만 중요하다는 것이다. – Chriss
내 업데이트를 확인하십시오. –
이걸 살펴볼 수 있습니까? http://stackoverflow.com/questions/22456767/noclassdeffounderror-org-hamcrest-matchers-using-powermock-osgi – Chriss