Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android EasyMock错误:java.lang.VerifyError:net.sf.cglib.proxy.Enhancer_Android_Junit_Easymock_Cglib - Fatal编程技术网

Android EasyMock错误:java.lang.VerifyError:net.sf.cglib.proxy.Enhancer

Android EasyMock错误:java.lang.VerifyError:net.sf.cglib.proxy.Enhancer,android,junit,easymock,cglib,Android,Junit,Easymock,Cglib,我已经为Android应用程序实现了一系列单元测试。问题是,我希望我的测试独立于服务器错误或其他记录期望的测试。看来模仿对象才是解决办法 我从EasyMock开始,遵循Vogella的教程: 问题是我得到了一个错误,我一直在网上寻找答案,但我找不到任何有用的。。。关于EasyMock错误的问题不多,但是我发现一篇帖子和我的很相似,但没有足够的帮助。我还发现了另一篇关于asm版本可能出现的错误的帖子 无论如何,问题似乎来自cglib。我在EasyMock网站上搜索了一些解释:我需要objeness

我已经为Android应用程序实现了一系列单元测试。问题是,我希望我的测试独立于服务器错误或其他记录期望的测试。看来模仿对象才是解决办法

我从EasyMock开始,遵循Vogella的教程:

问题是我得到了一个错误,我一直在网上寻找答案,但我找不到任何有用的。。。关于EasyMock错误的问题不多,但是我发现一篇帖子和我的很相似,但没有足够的帮助。我还发现了另一篇关于asm版本可能出现的错误的帖子

无论如何,问题似乎来自cglib。我在EasyMock网站上搜索了一些解释:我需要objeness(1.2)和Cglib(2.2)。我添加了.jar并遵循Vogella的建议。但它仍然不起作用

我还想知道模拟AsyncTask是一件好事,还是应该模拟AsyncTask调用的其他方法
onPostExecute()

错误日志:

java.lang.VerifyError: net.sf.cglib.proxy.Enhancer
at org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:249)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:159)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:59)
at org.easymock.EasyMock.createNiceMock(EasyMock.java:139)
at com.c4mprod.bhost.test.TestStudioActivity.setUp(TestStudioActivity.java:65)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
 @Override
public void setUp() throws Exception{
    super.setUp();
    setActivityInitialTouchMode(true);

    Intent testIntent = new Intent();
    testIntent.setAction(StudioActivity.ACTION_BHOST);
    testIntent.putExtra(StudioActivity.EXTRA_USER_ID,525);//DEVICE'S USER
    setActivityIntent(testIntent);

    //asyncGeoloc is an instance of LocationTask an AsyncTask
    //The error comes from this line below...
    asyncGeoloc = createNiceMock(StudioActivity.LocationTask.class);

    mStudioActivity = getActivity();

    mWFBoasterPreviewFragment = new WeakReference<BoasterPreviewFragment>((BoasterPreviewFragment) mStudioActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_preview));
    mWFStudioBoastPreviewFragment = new WeakReference<StudioBoastPreviewFragment>((StudioBoastPreviewFragment) mStudioActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_layout));
    mWFRecordFragment = new WeakReference<RecordFragment>((RecordFragment) mStudioActivity.getSupportFragmentManager().findFragmentByTag(RecordFragment.TAG_FRAGMENT_NAME));

    mBoasterPreviewFragment = mWFBoasterPreviewFragment.get();        
    mStudioBoastPreviewFragment = mWFStudioBoastPreviewFragment.get(); 
    mRecordFragment = mWFRecordFragment.get();        
}
public void testGeolocalistationLabel(){
    ActivityMonitor activityMonitor = getInstrumentation().addMonitor(StudioActivity.class.getName(), null, false);
    //My doInBackground() takes a LocationManager in param  
    LocationManager lLocation = (LocationManager) mStudioActivity.getSystemService(getInstrumentation().getTargetContext().LOCATION_SERVICE);
    expect(asyncGeoloc.doInBackground(lLocation)).andReturn("JUnit, Location");
    replay(asyncGeoloc);

    mStudioActivity.runOnUiThread(new Runnable() {
        @Override
        public void run(){
            mStudioBoastPreviewFragment.getGeoloc().performClick();
        }
      }); 

    StudioActivity lStudioActivity = (StudioActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor,5000);         
    assertEquals("JUnit, Location",mStudioBoastPreviewFragment.getGeolocTextView().getText());
}
我的设置()测试代码:

java.lang.VerifyError: net.sf.cglib.proxy.Enhancer
at org.easymock.internal.ClassProxyFactory.createEnhancer(ClassProxyFactory.java:249)
at org.easymock.internal.ClassProxyFactory.createProxy(ClassProxyFactory.java:159)
at org.easymock.internal.MocksControl.createMock(MocksControl.java:59)
at org.easymock.EasyMock.createNiceMock(EasyMock.java:139)
at com.c4mprod.bhost.test.TestStudioActivity.setUp(TestStudioActivity.java:65)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
 @Override
public void setUp() throws Exception{
    super.setUp();
    setActivityInitialTouchMode(true);

    Intent testIntent = new Intent();
    testIntent.setAction(StudioActivity.ACTION_BHOST);
    testIntent.putExtra(StudioActivity.EXTRA_USER_ID,525);//DEVICE'S USER
    setActivityIntent(testIntent);

    //asyncGeoloc is an instance of LocationTask an AsyncTask
    //The error comes from this line below...
    asyncGeoloc = createNiceMock(StudioActivity.LocationTask.class);

    mStudioActivity = getActivity();

    mWFBoasterPreviewFragment = new WeakReference<BoasterPreviewFragment>((BoasterPreviewFragment) mStudioActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_preview));
    mWFStudioBoastPreviewFragment = new WeakReference<StudioBoastPreviewFragment>((StudioBoastPreviewFragment) mStudioActivity.getSupportFragmentManager().findFragmentById(R.id.fragment_layout));
    mWFRecordFragment = new WeakReference<RecordFragment>((RecordFragment) mStudioActivity.getSupportFragmentManager().findFragmentByTag(RecordFragment.TAG_FRAGMENT_NAME));

    mBoasterPreviewFragment = mWFBoasterPreviewFragment.get();        
    mStudioBoastPreviewFragment = mWFStudioBoastPreviewFragment.get(); 
    mRecordFragment = mWFRecordFragment.get();        
}
public void testGeolocalistationLabel(){
    ActivityMonitor activityMonitor = getInstrumentation().addMonitor(StudioActivity.class.getName(), null, false);
    //My doInBackground() takes a LocationManager in param  
    LocationManager lLocation = (LocationManager) mStudioActivity.getSystemService(getInstrumentation().getTargetContext().LOCATION_SERVICE);
    expect(asyncGeoloc.doInBackground(lLocation)).andReturn("JUnit, Location");
    replay(asyncGeoloc);

    mStudioActivity.runOnUiThread(new Runnable() {
        @Override
        public void run(){
            mStudioBoastPreviewFragment.getGeoloc().performClick();
        }
      }); 

    StudioActivity lStudioActivity = (StudioActivity) getInstrumentation().waitForMonitorWithTimeout(activityMonitor,5000);         
    assertEquals("JUnit, Location",mStudioBoastPreviewFragment.getGeolocTextView().getText());
}
好的,如果有人有更多关于它的信息或者可以回答我关于模仿
AsyncTask
好还是不好的问题


谢谢你的帮助

A
VerifyError
表示您试图使用不同版本的库。在本例中,看起来EasyMock使用的CGLib版本与程序的其他部分不同

我看到您提到您将CGLib添加到类路径中,如果首先找到另一个错误的版本,那么您添加的版本可能不会被类加载器使用。我建议您将CGLib jar移动到类路径的前面,以便首先找到它

如果仍然出现错误,则可能需要使用相同版本的CGLib重新编译库。如果对CGLib的更改不兼容,这可能会导致编译时错误,因此您可能需要进行一些代码更改


您是如何构建代码的?一些较新的构建工具(如Maven)可以为您解决这些问题。

根据您的堆栈跟踪,您正在android上使用EasyMock。Android没有完全实现Java6,特别是缺少一些java.beans类(例如
java.beans.PropertyDescriptor
)。这些类有时由cglib使用

如果您在ClassProxyFactory.java:249设置断点,您可能会发现缺少哪个类