我刚开始尝试在基本上是我的第一个Android应用程序中设置一些单元测试.我有一段时间为此寻找资源,但最终还是能够把我希望的正确道路向前推进.
首先,这就是我所做的.
在Eclipse中,我右键单击了我想为其创建测试项目的项目.我选择了AndroidTools - > New Test Project我填写了必要的信息,为新项目选择../MyApp/tests的位置,并选择MyApp作为要测试的项目.其他一切都被保留为默认值.
在执行此操作时,我收到以下错误:
[2011-04-01 08:13:02 - WPMSTest] R.java手动修改!恢复生成的版本!
但一切似乎都没问题.我的tests文件夹中有一个新的源代码树.
所以我尝试通过RunAs - > Android jUnit test来执行它(首先在硬件上,然后在模拟器上).
在两次运行中,我在我的eclipse控制台中收到了以下内容:
[2011-04-01 08:23:04 - WPMSTest]在设备模拟器上启动检测android.test.InstrumentationTestRunner-5554
[2011-04-01 08:23:04 - WPMSTest]无法启动测试
我的两个清单文件:
WPMSTest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.WPMS.test"
android:versionCode="1"
android:versionName="1.0">
<instrumentation android:targetPackage="com.WPMS" android:name="android.test.InstrumentationTestRunner" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="android.test.runner" />
</application>
Run Code Online (Sandbox Code Playgroud)
WPMS:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.WPMS"
android:versionCode="1"
android:versionName="1.0">
<application android:label="@string/app_name" android:icon="@drawable/ic_launcher_wpms">
<activity android:name=".WPMS"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" …Run Code Online (Sandbox Code Playgroud) 我正在尝试为依赖WifiManager和返回的ScanResults的几个类实现一些单元测试.我想做的是能够控制我收到的ScanResults,以测试各种不同的条件.
不幸的是,我很难成功模拟WifiManager(虽然我想我可以在我的MockWifiManager中传递它的构造函数空引用).这只是我的第一个问题,因为我有一个MockWifiManager可以玩(如果这甚至可以工作!)我将不得不成功创建我的测试ScanResults,它没有公共构造函数(想象一下它是由某个工厂创建的).
问题:如果没有公共构造函数,我甚至可以扩展它吗?
我错了吗?我经常被问到如何做一个特定任务的问题,但实际上他们试图以错误的方式解决不同的问题,也许这就是我在这里做的事情?
我对android很新,所以不得不模拟所有这些功能一直试图说.
感谢您的投入!
编辑:我还有一段时间来实例化一个MockWifiManager.wifi管理器的构造函数期望IWifiManager是Android SDK中似乎不存在的类型.
我有一个地图将整数与矢量(对象)相关联.这些向量表示要执行的一组任务.为了减少使用此映射和向量时正在进行的复制量,我将它们设置为使用指针.
std::map<int, std::vector<MyObject *> *> myMap;
Run Code Online (Sandbox Code Playgroud)
在初始化包含myMap的类的过程中,我通过创建一个填充了新MyObjects的新向量来填充myMap.
然而,我关心的是内存管理.现在我把这些各种各样的物品放在堆的某个地方,当我完成它们时,我负责清理它们.我也知道在程序结束之前我永远不会完成它们.但是在10周内有人决定修改这个应用程序的聪明方法涉及从地图/向量中删除项目.这会导致内存泄漏.
我的问题是如何处理这些对象的正确释放,以便即使它们通过STL函数被删除,对象也会成功解除分配?
非常感谢您的帮助,如果我错过任何重要的事情,请告诉我!谢谢!
我可以在 Scala 中使用以下方法轻松实现这一点:
def permute(xs: List[Int], ys: List[Int]) = {
for {x <- xs; y <- ys} yield (x,y)
}
Run Code Online (Sandbox Code Playgroud)
所以如果我给它 {1, 2}, {3, 4} 我返回 {1, 3}, {1, 4}, {2, 3}, {2, 4}
我希望能够使用流将其转换为 java 8。
我遇到了一些困难,我希望能够将其扩展得更远,因为我希望能够从两个以上的列表中生成许多排列的测试样本。
即使使用流,它是否也不可避免地会成为嵌套的混乱,还是我不够应用自己?
在意识到我正在寻找笛卡尔积后发现了一些额外的答案:
我想知道这是否可能,如果是这样的话我怎么会这样做.如果不可能,我只需要在构造函数体中添加元素.
理想情况下,我希望地图在构造后不可变.
我想要实现的是在地图中添加两对从构造函数参数创建的对.