小编Cra*_*tis的帖子

从Xcode 3 Broke Unit Tests升级到Xcode 4

我有一个不作为应用程序运行的核心项目,它唯一的"产品"是构建和运行脚本.这个项目是在Xcode 3中创建的,并且运行良好.运行构建将运行测试脚本,没有麻烦.

升级到Xcode 4,我的脚本不再运行.我没有对该项目进行任何更改,但显然存在一些差异.我检查了构建设置,看起来脚本是管道结果/tmp/RunUnitTests.out,并且该文件的内容是:

/Developer/Tools/RunUnitTests:68: note: RunUnitTests exited without running tests because TEST_AFTER_BUILD was set to NO.
Run Code Online (Sandbox Code Playgroud)

这个TEST_AFTER_BUILD变量应该放在哪里?有没有办法在UI中找不到我找不到的,或者我是否需要在其他地方设置它?

(我假设自从Xcode 4到达Gold Master后,讨论这些东西是安全的吗?)

xcode unit-testing objective-c

8
推荐指数
1
解决办法
2626
查看次数

什么传递给Arrays实例方法toArray(T [] a)方法?

如果您有一个Collection的实例,请说:

Collection<String> addresses = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

然后用一堆值填充哪些值,这是"最好的"方式,如果有的话,使用toArray()方法而不需要类型转换?

String[] addressesArray = addresses.toArray(new String[] {});
String[] addressesArray = addresses.toArray(new String[0]);
String[] addressesArray = addresses.toArray(new String[addresses.size()]);
String[] addressesArray = addresses.toArray(new String[addresses.size() + 5]);
Run Code Online (Sandbox Code Playgroud)

前两个之间是否存在语义差异?第三是最有效的吗?第四个效率低于第三个吗?

java arrays collections casting

7
推荐指数
2
解决办法
2936
查看次数

显示模态NSWindow,而不激活其他应用程序窗口

我有一个NSStatusItem正确显示在MenuBar中.其中一个项目(单击时)显示我的应用程序中的模态NSWindow,用于执行一次性任务,然后消失.(例如,用户输入一小段文字,点击"保存",模态NSWindow就会消失.)

应用程序在后台运行时会出现此问题.模态窗口正确显示在前台运行的任何应用程序之上,但是当用户单击"保存"按钮时,应用程序窗口的其余部分也会处于活动状态.这是不可取的,因为用户必须回到他们正在使用的任何应用程序.(破坏NSStatusItem的便利性.)我正在使用以下方式显示模态窗口:

[myWindow setFrame:finalRect display:YES animate:NO];
[myWindow setLevel:NSPopUpMenuWindowLevel];
[NSApp runModalForWindow:myWindow];
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止我的弹出窗口中的点击/事件导致应用程序的其余部分变为活动状态?或者让NSApp知道这个特定面板不应该自动激活应用程序的其余部分的方法?谢谢!

macos xcode cocoa modal-dialog nswindow

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

未出现在Interface Builder中未选中"标题栏"的NSPanel

所以我以为我已经覆盖了我的基地,但显然我错过了关键的一两步.

makeKeyAndOrderFront:当按下NSStatusItem时,我有一个显示()的NSPanel.事情很有效,但是当NSPanel显示标题栏时,面板也可以拖动.(这是不受欢迎的.)

第一个屏幕截图显示了在"外观"类别中在Interface Builder中启用"标题栏"的面板.(抱歉模糊不清,现在仍然处于锁定和关键状态.)

第一个截图

说是在Interface Builder中做出更改取消选中"标题栏"复选框.然后我保存并重新运行,这就是你在第二个屏幕截图中看到的内容.虽然出现轻微阴影,但面板却没有.

在此输入图像描述

我试过的事情:

  • 我子类的NSPanel并返回YEScanBecomeKeyWindowcanBecomeMainWindow一些调查后,但(前子类)都返回这些方法NO无论我是否使用了标题栏或不是.所以我认为这不是问题所在.

  • 我确保NSPanel的框架设置正确.它有一个很好的高度,原点也设置正确.

编辑:忘记提及:

该应用程序是一个仅菜单栏的应用程序.在下面的屏幕截图中,请注意添加了一个附加条目Info.plist以强制执行此操作.

信息列表

xcode cocoa objective-c nspanel

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

Django中的条件'with'标记

我第一次使用Django(和Python),我正在寻找一个包含模板的正确解决方案,该模板可能已经提供或未提供值.

例如,此模板将始终定义"公司",但可能并不总是定义"用户".如果未定义'user',则应定义一个,如下所示:

<% with guy=(user if user != None else company.admin_user) %>
Run Code Online (Sandbox Code Playgroud)

但我还没有找到一个很好的方法来实现这一目标.在某些情况下,用户将由模板的包含者定义,在其他情况下,模板应该必须找到"默认"用户.

编辑:根据Ignacio的回答,解决方案是:

<% with guy=user|default:company.admin_user %>
Run Code Online (Sandbox Code Playgroud)

python django

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

何时以编程方式创建自定义Django权限?

Django 1.4的权限/身份验证文档提供了以下代码片段,用于以编程方式创建自定义权限:

编辑:(我想采用这种对于那些权限,不一定链接到一个特定的模型类,但跨越多个类型的更一般的权限)

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get(app_label='myapp', model='BlogPost')
permission = Permission.objects.create(codename='can_publish',
                                       name='Can Publish Posts',
                                       content_type=content_type)
Run Code Online (Sandbox Code Playgroud)

资源

我的问题是,其中的代码应该放置的位置.显然这些应该只创建一次,但我不想在shell中这样做.看起来这应该存储在某个文件中.(出于文档的缘故.)

python django permissions

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

Hamcrest匹配器比较JSON的双值

我正在使用Hamcrest CoreMatcher类作为spring-test集成测试的一部分.我的JSON看起来像:

{"data":[{"distanceInMiles":4,"id":"f97236ba-f4ef-4...
Run Code Online (Sandbox Code Playgroud)

我的集成测试看起来像:

double miles = 4.0
Activity a = new BasicActivity(miles);
this.activityManager.add(a); // A mock activity manager (in-memory)
...
this.mockMvc.perform(get("/").accept("application/json"))
    .andExpect(jsonPath("$.data[0].distanceInMiles", is(miles)))
Run Code Online (Sandbox Code Playgroud)

但是,断言失败了:

java.lang.AssertionError: JSON path "$.data[0].distanceInMiles"
Expected: is <4.0>
     but: was <4>
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
Run Code Online (Sandbox Code Playgroud)

我知道这里有一个单独的IsCloseTo匹配器:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/IsCloseTo.html,但是像这样使用它:

.andExpect(jsonPath("$.data[0].distanceInMiles", closeTo(miles, 0)))
Run Code Online (Sandbox Code Playgroud)

导致一个奇怪的错误:

java.lang.AssertionError: JSON path "$.data[0].distanceInMiles"
Expected: a numeric value within <0.0> of <4.0>
     but: was a java.lang.Integer (<4>)
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
Run Code Online (Sandbox Code Playgroud)

我希望避免包含某种错误 - 我希望返回的值完全正确4,我只是不关心包含多少尾随零.

java spring json hamcrest spring-test

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

下载项目依赖项时,Maven抛出IllegalStateException(与SSL相关?)

我正在ARM机器上设置一个开发环境,其中包含以下版本的Java和Maven,两者都通过apt-get以下方式安装:

(xenial)craig@localhost:~$ mvn -version
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_91, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-armhf/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.14.0", arch: "arm", family: "unix"

(xenial)craig@localhost:~$ java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~16.04.1-b14)
OpenJDK Zero VM (build 25.91-b14, interpreted mode)
Run Code Online (Sandbox Code Playgroud)

但是,当我mvn clean install在我的项目上运行时,它无法尝试下载确实存在的POM文件.(我可以在浏览器中访问它.)

堆栈跟踪非常大,但根似乎是:

Caused by: java.lang.IllegalStateException
    at sun.security.ec.ECDHKeyAgreement.deriveKey(Native Method)
    at sun.security.ec.ECDHKeyAgreement.engineGenerateSecret(ECDHKeyAgreement.java:130)
    at sun.security.ec.ECDHKeyAgreement.engineGenerateSecret(ECDHKeyAgreement.java:163)
    at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:648)
    at sun.security.ssl.ECDHCrypt.getAgreedSecret(ECDHCrypt.java:101)
    at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:1067)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:348) …
Run Code Online (Sandbox Code Playgroud)

java ssl maven

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

在 Spring 集成测试期间刷新/重建特定的 bean

我们现有的 Spring Boot 集成设置用于@DirtiesContext在不同的测试方法之间重建整个 bean 池。

这是相当慢的,因此我们开始使用可以“刷新”或在内部拆除/重建的 bean ,而无需重新创建实例。

问题是只有一些bean 支持这一点。如果我们控制UsersBean,我们可以实现一个UsersBean.refresh()方法并在我们的方法中调用它@After

但是,如果我们现有的 bean/类不支持刷新,或者我们无法控制,那么我们如何有条件地指示某些 bean 在特定测试后需要被弄脏/重建?

或者更简洁地说:有没有办法在测试方法结束时将 Bean 池的一部分标记为脏,以便重建?

java junit spring integration-testing spring-boot

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

Swift计算属性以返回基础数组的副本

我有一个用Objective-C编写的模型类,我正在转换为Swift.它包含一个NSMutableArray内部,但getter的方法签名,以及实际的返回值NSArray.调用时,它会创建一个不可变的副本来返回.

基本上,我希望调用者能够迭代/检查容器,但不能修改它.我有这个测试片段:

class Container {
    internal var myItems = [String]()

    func sayHello() {
        "I have: \(myItems)"
    }
}

let cont = Container()

cont.myItems.append("Neat") // ["Neat"]

cont.sayHello() // This causes sayHello() to print: "I have: [Neat]"

var isThisACopy = cont.myItems

isThisACopy.append("Huh") // ["Neat", "Huh"]

cont.sayHello() // This ALSO causes sayHello() to print: "I have: [Neat]"
Run Code Online (Sandbox Code Playgroud)

我一直试图找到一种覆盖getter的方法,myItems以便它返回一个不可变的副本,但似乎无法确定如何.

尝试#1

这会产生编译器错误: Function produces expected type '_ArrayBuffer<(String)>'; did you mean to call it with '()'?

internal var …
Run Code Online (Sandbox Code Playgroud)

swift

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