小编Fin*_*ive的帖子

如何在使用Espresso进行测试时提供模拟数据

我们有一个非常大的Android应用程序没有测试.我们正遭受典型的质量/太长的手动回归测试周期问题.

作为一名刚接触Android的服务器端开发人员,我想介绍开发人员测试.

我可以看到如何使用JUnit对普通Java代码进行单元测试.

但是,活动/碎片/适配器更加困难.

我观看了GTAC的Espresso视频并留下了深刻的印象并决定使用它.

我正在努力的是如何为我的测试用例提供模拟数据然后确认显示.

这甚至可能吗?似乎Espresso用于黑盒测试,因为(通常)黑盒测试由QA完成,因此限制了它对开发人员的使用(其目标受众).

android android-espresso

16
推荐指数
1
解决办法
1万
查看次数

自定义媒体类型的使用是一个不错的选择吗?

我被一位开发人员(现在左)说服了,发展RESTful Web服务的正确方法是为您的服务创建自定义媒体类型.

例如application/vnd.acme.payroll.v1 + json

这样,您可以告诉客户端指定要使用的编码而不更改URI.

这种技术是好的吗?通常服务将版本嵌入到URL中:

例如/acme/1.0/payroll/

我在执行客户端使用此方案时遇到了很多困难,特别是因为DELETE似乎没有强制执行媒体类型

rest

9
推荐指数
1
解决办法
1961
查看次数

使用Square最新罐子的问题 - 改造,okhttp,okio和okhttp-urlconnection

我为我正在研究的一个功能介绍了以下Square广口瓶:

  • okttp-2.0.0
  • okhttp-的URLConnection-2.0.0.jar
  • 奥基奥-1.0.0.jar
  • 改装的1.6.1.jar

我从中央maven repo下载了这些.

一切都在本地工作正常,我将我的代码提交给svn.我们有一个Jenkins CI服务器,可以生成我们的调试和发布版本.这失败了.

我的本地环境与Jenkins之间存在许多差异:

  • 本地我运行java 8,Jenkins运行java 6
  • 在本地我只生成调试版本,Jenkins生成调试和发布版本
  • 本地我有构建工具版本22.6.2,Jenkins运行18.0.1

这些是我在Jenkins日志中看到的那类问题:

    -compile:
    [javac] Compiling 545 source files to /var/lib/jenkins/jobs/Planner_4_10_Retrofit/workspace/Planner_4_10_Retrofit/bin/classes
    [javac] warning: /var/lib/jenkins/jobs/Planner_4_10_Retrofit/workspace/Planner_4_10_Retrofit/libs/okhttp-2.0.0.jar(com/squareup/okhttp/OkHttpClient.class): major version 51 is newer than 50, the highest major version supported by this compiler.
    [javac] It is recommended that the compiler be upgraded.

    [dex] Pre-Dexing /var/lib/jenkins/jobs/Planner_4_10_Retrofit/workspace/Planner_4_10_Retrofit/libs/okhttp-urlconnection-2.0.0.jar -> okhttp-urlconnection-2.0.0-5f923d75acdde39a4616800eb222e1bf.jar
           [dx] 
           [dx] trouble processing:
           [dx] bad class file magic (cafebabe) or version (0033.0000)
           [dx] ...while parsing com/squareup/okhttp/internal/huc/CacheAdapter.class
           [dx] ...while processing com/squareup/okhttp/internal/huc/CacheAdapter.class

    [proguard] Initializing...
     [proguard] …
Run Code Online (Sandbox Code Playgroud)

java android jenkins retrofit okhttp

8
推荐指数
2
解决办法
9009
查看次数

如何使用Gradle运行cucumber-jvm测试

我正在尝试使用新的Cucumber-jvm系统和Gradle作为我的构建系统.

我在GitHub cucumber-jvm项目(https://github.com/cucumber/cucumber-jvm)中使用了示例Java代码.

我的项目在IntelliJ中设置,IDE可以运行测试.

但是,Gradle没有找到任何要运行的测试.我知道这是因为我打破了测试而Gradle什么也没说.它在工作时也没有说什么.

它试图运行的类看起来像这样:

import cucumber.junit.Cucumber;
import cucumber.junit.Feature;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@Feature(value = "CarMaintenance.feature")
public class FuelCarTest {
}
Run Code Online (Sandbox Code Playgroud)

我是黄瓜和Gradle的新手!

cucumber gradle

7
推荐指数
1
解决办法
6753
查看次数

如何同时执行两个任务并在Groovy中等待结果?

我有一个大型的处理任务,我相信它已经成熟,可以提高并发性和并行性.

我看了一下GPars文档,发现它们很混乱,所以我希望这里的人能提供帮助.

我想要并行执行的第一项任务目前看起来像这样:

def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow)
def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)
Run Code Online (Sandbox Code Playgroud)

两者都返回一个对象列表,两者都可以并行运行.

我想一起执行它们然后在处理返回列表之前等待它们完成(然后我会查找列表之间的匹配但我稍后会讨论).

谢谢

拉克什

concurrency groovy gpars

6
推荐指数
1
解决办法
5714
查看次数

如何在依赖作业之间配置执行开始?

我的Jenkins服务器设置了两个作业A和B说.

作业A由subversion中的更改触发,运行单元测试,如果成功,则创建WAR并将其部署到另一个环境.

如果作业A成功,则作业B触发.此作业针对部署的WAR运行测试.

问题是部署过程需要一段时间,并且WAR没有准备好及时作业B启动并尝试使用它.

我正在寻找关于如何延迟作业B的想法,直到WAR启动并运行.

有没有办法,一旦工作B被触发等待x秒?如果可以避免的话,我真的不想把它放到Job B的测试中.

谢谢

jenkins

5
推荐指数
1
解决办法
3111
查看次数

MongoDB 唯一索引不起作用

我正在使用 Java 中的 Mongodb。

我创建一个集合和一个索引,如下所示:

collection = mongoClient.getDB(DB_NAME).getCollection(COLLECTION_NAME)
collection.ensureIndex(new BasicDBObject(['customerReference': 1, 'unique': true]))
Run Code Online (Sandbox Code Playgroud)

当我检查 mongo shell 时,我看到:

{ 
   "v" : 1, 
   "key" : { "customerReference" : 1, "unique" : true }, 
   "ns" : "diagnostics.diagnosticData", 
    "name" : "customerReference_1_unique_" 
}
Run Code Online (Sandbox Code Playgroud)

但我仍然可以插入重复项:

{ 
  "_id" : ObjectId("52f3ba8a7d841c01680e0bc5"), 
  "customerReference" : 3, 
  "data" : "original data", 
  "created" : ISODate("2014-02-06T16:38:34.191Z") 
}
{ 
  "_id" : ObjectId("52f3ba8a7d841c01680e0bc6"), 
  "customerReference" : 3, 
  "data" : "duplicate data", 
  "created" : ISODate("2014-02-06T16:38:34.194Z") 
}
Run Code Online (Sandbox Code Playgroud)

为什么?

java groovy mongodb

5
推荐指数
1
解决办法
5192
查看次数

改造可观测量和取消

有人可以确认在Observable上调用unSubscribe是否是取消请求的正确方法?

令人讨厌的是,Nexus 7发出了重复的网络请求,并且当调用Activity被销毁时,第一次调用需要被丢弃.

我通过在尝试使用它之前检查回调(我自己的)不为null来解决这个问题.

然而取消订阅似乎是一个更好的解决方案,但如果这是正确的方法,则无法找到任何信息.

我注意到Retrofit会抛出一个内部错误(InterruptedException)但是没有冒泡到我的错误回调 - 这是一件好事!

android retrofit

5
推荐指数
1
解决办法
858
查看次数

改进Observables并获得响应

我正在使用Retrofit和RxJava,但似乎无法做我想要的.

这是我对我的网络服务的声明:

Observable<Response> rawRemoteDownload(@Header("Cookie") String token, @Path("programId") int programId);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是webservice返回403和一个带有详细信息的json有效负载.

Retrofit调用onError,只传递Throwable,所以我无法检查响应体.

这是我的测试代码的一部分

apiManager.rawRemoteDownloadRequest("token", 1).subscribe(new Observer<Response>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            // this is called and I've lost the response!
        }

        @Override
        public void onNext(Response response) {

        }
    });
Run Code Online (Sandbox Code Playgroud)

解:

感谢Gomino,我将其作为解决方案:

new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            if (throwable instanceof RetrofitError) {
                Response response = ((RetrofitError) throwable).getResponse();

                System.out.println(convertToString(response.getBody()));
            }
        }
Run Code Online (Sandbox Code Playgroud)

convertToString的位置如下:

private String convertToString(TypedInput body) {
    byte[] bodyBytes = ((TypedByteArray) …
Run Code Online (Sandbox Code Playgroud)

rx-java retrofit

4
推荐指数
1
解决办法
2239
查看次数

使用 RxJava 批量插入

我需要从 JSon 提要加载数据(最多 22,000 条记录)并将它们存储在我的 android 设备上(在 SQLite 中)。

单独插入很容易实现,但速度很慢。理想情况下,我想批量插入对象并将这些对象的列表传递给数据库。

我可以看到如何强制执行,但我真的很想用 RxJava 来做,但不确定如何做。

谢谢

sqlite android rx-java

4
推荐指数
1
解决办法
2566
查看次数

通过 gradle 将系统属性从命令行传递到我的应用程序

我的应用程序需要一个位置进行测试。我想通过系统属性传递它。

在命令行上运行时,gradle 不会传递值:

./gradlew -Dfoo=bar clean cucumber
Run Code Online (Sandbox Code Playgroud)

Java代码:

System.out.println("**foo(props):"+ System.getProperty("foo"));
Run Code Online (Sandbox Code Playgroud)

输出:

**foo(props):null
Run Code Online (Sandbox Code Playgroud)

我在这里看到了一些关于这个的文档,但是当我尝试在我的 gradle 脚本中使用它时,我收到以下错误:

按需创建属性(又名动态属性)已被弃用,并计划在 Gradle 2.0 中删除。请阅读http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html以获取有关替换动态属性的信息。

不推荐使用的动态属性:“任务 ':cucumber'”上的“systemProperties”,值:“{jna.platform.library....”。

这是我的 build.gradle 的一个片段:

task cucumber() {
    dependsOn assemble, compileTestJava
    doLast {
        systemProperties = System.getProperties()
        javaexec {
            main = "cucumber.api.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = ['-f', 'pretty', '--glue', 'steps', 'src/test/resources']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你如何通过 Gradle 将系统属性传递给应用程序?

java gradle

3
推荐指数
1
解决办法
4182
查看次数

处理Maven快照 - 最佳实践

我不是长枪而已,但我会感激一些帮助.

情况如下:

我在使用Maven 2的大型分布式开发团队中工作.我们有一个Nexus存储库,但它只保存版本,而不是快照.

问题是双重的:

  1. 每天早上我都要创建我不工作的其他模块,构建它们然后构建我的模块.这是因为我的模块对这些其他模块具有快照依赖性.这需要时间并且真正加起来,因为每个人都需要这样做才能保持最新状态.

  2. 假设模块A需要模块B并被声明为快照依赖项.模块B更新为更高版本号,但开发人员忘记更新模块A pom.所以模块A正在使用较旧的快照,它可能暂时无法识别,可能只是在它的时间进行释放时.

那么如何最好地处理这些问题呢?

maven-2 snapshot repository maven

2
推荐指数
1
解决办法
3925
查看次数