我尝试在我的应用中设置类似于Android Testing Codelab的测试,并在app / build.gradle中创建了一个模拟构建变体来执行此操作:
productFlavors {
mock {
}
prod {
}
}
然后我将构建变量设置为mockDebug,在src /目录中创建了一个模拟文件夹,然后在模拟文件夹中创建了一个模拟活动(ThreePaneMockActivity)和其他类(ThreePaneMockView,ThreePaneMockPresenter)。之后,我尝试运行模拟活动以开始测试我创建的自定义视图(ThreePaneWindow)。在运行模拟活动时,ap崩溃时会出现以下问题引起的异常:
引起:java.lang.ClassNotFoundException:没有找到类" android.view.ThreePaneMockView"在路径上:DexPathList ....
ThreePaneMockView与ThreePaneMockActivity位于同一个软件包中,因此我猜测我的app build.gradle文件存在问题,该文件不构建该类文件并将其包含在应用程序包中。此外,Android正在寻找" android.view.ThreePaneMockView"而不是在我的模拟包中。
那么,我的模拟构建变体出了什么问题呢?如何在构建中正确包含所有模拟类?
编辑:文件夹层次结构:
src/
|
|---main/
| |
| |---java/com/wilee8/coyotereader3/threepanewindow/
| |
| |---ThreePaneWindow.java
|---mock/
|
|---java/com/wilee8/coyotereader3/
|
|---ThreePaneMockActivity.java
|---ThreePaneMockPresenter.java
|---ThreePaneMockView.java
ThreePaneMockView扩展了LinearLayout,它是导致异常的ThreePaneMockActivity中的以下行:
ThreePaneMockView view = (ThreePaneMockView)
getLayoutInflater().inflate(R.layout.view_three_pane_mock, null);
R.layout.view_three_pane_mock是在mockDebug变体中创建的,并且在顶层有一个ThreePaneMockView。
并且有
因此输入此响应让我得到答案,它与配置构建变体无关。当我仔细检查R.layout.view_three_pane_mock顶部的标签时,我意识到它需要。我改变了它并且它工作了 - 它仍然崩溃,但是新的错误。