单元测试时被测工程引用了其它工程

eclipse中建立三个工程: Lib (android library project) <- App (android application project) <- Test (android unit test project) 并定义如下类:
 
[Lib]
public class A {}
 
[App]
public class A extends B {}
 
[Test]
public class MyUnitTest extends AndroidTestCase {
    public void test() {
        new A();
        new B();
    }
}
 
TestLib作为一个Android library被TestMain 引用;TestMainTest 作为测试工程,也引用了被测工程TestMain。
Test无法被编译,报错:A cannot be resolved。这是因为被测工程引用的Lib对于Test是不可见的。很容易想到的一个解决方案就是在Test中增加对Lib的引用。这样虽然解决了编译的问题,却在运行时发生崩溃。报错如下:
 
W/dalvikvm( 9275): Class resolved by unexpected DEX: Lcom/example/B;(0x40513450):0x294c70 ref [Lcom/example/A;] Lcom/example/A;(0x40513450):0x8f600
W/dalvikvm( 9275): (Lcom/example/B; had used a different Lcom/example/A; during pre-verification)
W/dalvikvm( 9275): Unable to resolve superclass of Lcom/example/B; (1)
W/dalvikvm( 9275): Link of class 'Lcom/example/B;' failed
E/dalvikvm( 9275): Could not find class 'com.example.B', referenced from method com.example.test.MyUnitTest.test
W/dalvikvm( 9275): VFY: unable to resolve new-instance 3 (Lcom/example/B;) in Lcom/example/test/MyUnitTest;
D/dalvikvm( 9275): VFY: replacing opcode 0x22 at 0x0000
D/dalvikvm( 9275): VFY: dead code 0x0002-000a in Lcom/example/test/MyUnitTest;.test ()V


 
这是因为Test和App 都引用了Lib,所以它们产生的apk都包含com.example.A。
 
在eclipse中不要在测试工程中显式的引用一个library project(如果这个library也被被测工程引用)。这样会导致被测和测试工程产生的apk中包含同样的类,测试会在运行时失败。
 
解决方法就是修改被测工程的build path,把引用的lib工程export出来。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值