2012-07-03 6 views
6

Tôi đang cố gắng sử dụng PowerMock để thử một số lớp được sử dụng trong thử nghiệm ứng dụng Android của chúng tôi (ví dụ BluetoothSocket).VerifyError với PowerMock trên Android

Tôi đã tải xuống tệp zip trên trang mã của Google PowerMock với tất cả các phụ thuộc và thêm chúng vào dự án thử nghiệm Android của tôi (bao gồm cả đường dẫn xây dựng).

Tuy nhiên khi tôi cố gắng sử dụng PowerMock như thế này:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(NetworkUtil.class) 
public class TestSendAck extends TestCase{ 

    @Test 
    public void testGenerateURL() { 
     PowerMock.mockStatic(NetworkUtil.class); 

     EasyMock.expect(NetworkUtil.getLocalHostname()).andReturn("triumph"); 

     PowerMock.replayAll(); 
     PowerMock.verifyAll(); 
    } 
} 

tôi nhận được stack trace sau:

java.lang.ExceptionInInitializerError 
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.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212) 
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163) 
at org.powermock.api.easymock.PowerMock.mockStatic(PowerMock.java:287) 
at se.metrima.mafield.test.TestSendAck.testGenerateURL(TestSendAck.java:19) 
at java.lang.reflect.Method.invokeNative(Native Method) 
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) 
Caused by: java.lang.VerifyError: net.sf.cglib.core.ReflectUtils 
at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:166) 
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) 
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216) 
at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) 
... 19 more 

tôi chỉ nhận được lỗi này khi chạy dự án thử nghiệm như một JUnit thử nghiệm Android , nếu tôi chạy nó như một công cụ kiểm tra JUnit thông thường, nhưng sau đó tất cả các thử nghiệm của tôi cần khung Android tự nhiên không thành công.

Tôi làm cách nào để giải quyết vấn đề này? Tôi rất mới để thử nghiệm đơn vị vì vậy tôi không thực sự hiểu tất cả các khái niệm được nêu ra.

+0

Bạn đã giải quyết nó chưa? –

Trả lời

2

Bạn có thể có các phiên bản không rõ ràng của các thư viện JUnit trong thiết lập đường dẫn lớp của các thử nghiệm của bạn trong Android. Bạn đang cố gắng chạy với JUnit 3 hoặc 4? Mã của bạn đang sử dụng chú thích của 4, nhưng cũng mở rộng lớp cơ sở TestCase của 3 và bạn không thể kết hợp cả hai. Tốt nhất hiện nay là sử dụng JUnit 4. Tôi không quá quen thuộc với phát triển Android, vì vậy hãy kiểm tra phiên bản của JUnit mà môi trường Android đang tìm kiếm. Điều tiếp theo cần kiểm tra là nếu bạn đang sử dụng đúng phiên bản PowerMock, vì có các phiên bản khác nhau của nó cho JUnit 3 và 4.