我们有一个非常大的Android应用程序没有测试.我们正遭受典型的质量/太长的手动回归测试周期问题.
作为一名刚接触Android的服务器端开发人员,我想介绍开发人员测试.
我可以看到如何使用JUnit对普通Java代码进行单元测试.
但是,活动/碎片/适配器更加困难.
我观看了GTAC的Espresso视频并留下了深刻的印象并决定使用它.
我正在努力的是如何为我的测试用例提供模拟数据然后确认显示.
这甚至可能吗?似乎Espresso用于黑盒测试,因为(通常)黑盒测试由QA完成,因此限制了它对开发人员的使用(其目标受众).
我被一位开发人员(现在左)说服了,发展RESTful Web服务的正确方法是为您的服务创建自定义媒体类型.
例如application/vnd.acme.payroll.v1 + json
这样,您可以告诉客户端指定要使用的编码而不更改URI.
这种技术是好的吗?通常服务将版本嵌入到URL中:
例如/acme/1.0/payroll/
我在执行客户端使用此方案时遇到了很多困难,特别是因为DELETE似乎没有强制执行媒体类型
我为我正在研究的一个功能介绍了以下Square广口瓶:
我从中央maven repo下载了这些.
一切都在本地工作正常,我将我的代码提交给svn.我们有一个Jenkins CI服务器,可以生成我们的调试和发布版本.这失败了.
我的本地环境与Jenkins之间存在许多差异:
这些是我在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) 我正在尝试使用新的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的新手!
我有一个大型的处理任务,我相信它已经成熟,可以提高并发性和并行性.
我看了一下GPars文档,发现它们很混乱,所以我希望这里的人能提供帮助.
我想要并行执行的第一项任务目前看起来像这样:
def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow)
def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)
Run Code Online (Sandbox Code Playgroud)
两者都返回一个对象列表,两者都可以并行运行.
我想一起执行它们然后在处理返回列表之前等待它们完成(然后我会查找列表之间的匹配但我稍后会讨论).
谢谢
拉克什
我的Jenkins服务器设置了两个作业A和B说.
作业A由subversion中的更改触发,运行单元测试,如果成功,则创建WAR并将其部署到另一个环境.
如果作业A成功,则作业B触发.此作业针对部署的WAR运行测试.
问题是部署过程需要一段时间,并且WAR没有准备好及时作业B启动并尝试使用它.
我正在寻找关于如何延迟作业B的想法,直到WAR启动并运行.
有没有办法,一旦工作B被触发等待x秒?如果可以避免的话,我真的不想把它放到Job B的测试中.
谢谢
我正在使用 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)
为什么?
有人可以确认在Observable上调用unSubscribe是否是取消请求的正确方法?
令人讨厌的是,Nexus 7发出了重复的网络请求,并且当调用Activity被销毁时,第一次调用需要被丢弃.
我通过在尝试使用它之前检查回调(我自己的)不为null来解决这个问题.
然而取消订阅似乎是一个更好的解决方案,但如果这是正确的方法,则无法找到任何信息.
我注意到Retrofit会抛出一个内部错误(InterruptedException)但是没有冒泡到我的错误回调 - 这是一件好事!
我正在使用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) 我需要从 JSon 提要加载数据(最多 22,000 条记录)并将它们存储在我的 android 设备上(在 SQLite 中)。
单独插入很容易实现,但速度很慢。理想情况下,我想批量插入对象并将这些对象的列表传递给数据库。
我可以看到如何强制执行,但我真的很想用 RxJava 来做,但不确定如何做。
谢谢
我的应用程序需要一个位置进行测试。我想通过系统属性传递它。
在命令行上运行时,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 将系统属性传递给应用程序?
我不是长枪而已,但我会感激一些帮助.
情况如下:
我在使用Maven 2的大型分布式开发团队中工作.我们有一个Nexus存储库,但它只保存版本,而不是快照.
问题是双重的:
每天早上我都要创建我不工作的其他模块,构建它们然后构建我的模块.这是因为我的模块对这些其他模块具有快照依赖性.这需要时间并且真正加起来,因为每个人都需要这样做才能保持最新状态.
假设模块A需要模块B并被声明为快照依赖项.模块B更新为更高版本号,但开发人员忘记更新模块A pom.所以模块A正在使用较旧的快照,它可能暂时无法识别,可能只是在它的时间进行释放时.
那么如何最好地处理这些问题呢?