Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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
Java Android项目中的常规JUnit_Java_Android_Junit_Ide - Fatal编程技术网

Java Android项目中的常规JUnit

Java Android项目中的常规JUnit,java,android,junit,ide,Java,Android,Junit,Ide,我一直在想如何在我的Android应用程序中包含标准JUnit3.x(甚至JUnit4.x)测试。我希望在Android单元测试工具上使用JUnit,因为它更快,并且直接在我的IDE中运行(在IDE中,Android JUnit工具需要首先部署到设备或模拟器)。我还想使用JUnit来实施适当的SoC(关注点分离)。最初我设置了多个模块来实现这一点,主Android模块和核心库模块,其中主模块将具有所有Android细节,核心模块将具有普通的旧Java对象(POJO)和JUnit 最近,我开始了一

我一直在想如何在我的Android应用程序中包含标准JUnit3.x(甚至JUnit4.x)测试。我希望在Android单元测试工具上使用JUnit,因为它更快,并且直接在我的IDE中运行(在IDE中,Android JUnit工具需要首先部署到设备或模拟器)。我还想使用JUnit来实施适当的SoC(关注点分离)。最初我设置了多个模块来实现这一点,主Android模块和核心库模块,其中主模块将具有所有Android细节,核心模块将具有普通的旧Java对象(POJO)和JUnit

最近,我开始了一个Android项目的工作,在这个项目中,我开发了一个库来处理一些特定于Android的低级工作,并将其作为高级操作公开给主模块。问题是我需要在库模块中使用JUnit,但我不想再使用另一个模块来这样做。在理想的世界里,我会:

主模块:包括所有高级UI和控制器逻辑,用于在活动、片段等之间导航。具体取决于MyLib

MyLib:包含封装低级逻辑的高级接口,用于处理特定于android的网络、持久性、加速计读取等事务。一些低级逻辑中涉及大量POJO。还包括一个示例或演示应用程序,用于直接练习这些接口。包括在POJO上运行JUnit的功能


我是在做白日梦,还是有一种方法可以使用当前的开发工具智能地进行设置?我主要使用IntelliJ Idea,但也会接受特定于Eclipse的解决方案。

在JUnit测试运行程序中直接运行测试时遇到的问题是,您将无法调用任何com.android.*类。这是因为android.jar中的这些类在SDK中被删除了。只有Dalvik字节码版本的模拟器才有真正的实现

避免调用com.android.*类是非常困难的,特别是考虑到如此多的android方法需要上下文

我也觉得这有点令人沮丧,因为模拟器启动和执行代码都很慢。这使得测试开发非常乏味

我使用JUnit测试运行程序和仿真器的唯一运气是创建一个单独的非Android项目,指向我的项目文件。这允许我在仿真器之外启动JUnits,但是我在实际可以测试的类方面非常有限

简而言之

  • 使用Junit测试类和静态方法
  • 使用工具测试应用程序的点击ux响应

仪器仪表是一个痛苦的开始,需要时间来学习。因此,在hello worlds上投入大量时间。这是一个全新的世界

我完全理解和欣赏这一限制,这实际上是一个特点。这个练习的重点是确保类之间的适当内聚,并将特定于Android的代码限制在适当的位置。不过,我还是担心,我在这里真正寻找的是一种对总体上更可取的解决方案的攻击。我有类似的经验,使用emulator进行测试的速度很慢。您最好使用1.2GHz或以上处理器的手机。任何较小的测试都会很痛苦。我尽量避免使用设备进行测试,不管是真实的还是仿真的。这对于大多数逻辑来说是不必要的。我可以通过自定义ant黑客来解决这个问题,我不喜欢这样做,我宁愿想办法在我的IDE中建立这样一个环境。我的问题是关于在没有引入库的情况下在单个Android项目中混合使用这两种类型的测试。您需要有一个单独的测试项目,而不是作为开发项目的一部分。测试应该是独立的,最好由一个同样优秀的测试团队来处理。我同意我可能应该设置一个独立的项目。我试着不把另一个组件从一个项目中分离出来,而这个项目本身就是从主项目中分离出来的。我知道这种感觉,一个单独的项目会给人一种测试不完整的感觉。有些软件包会有测试,有些则不会。但这是一个想法,对吗?实际上,一个单独的项目只让我感到困扰,它在一个简单的三层蛋糕上增加了第四层。主项目有一个单独的组件w/pojo,我可以开始使用它。最后,我将让Main和UIModule都依赖于pojocore,并且从Main到UIModule有第二个依赖关系。