有一些程序在MacOSX Mountain Lion下运行,现在(自安装10.8.2以来)导致设置不需要的电源管理断言.我正在寻找一种方法来清除这些断言.
这是一个例子:这些程序中的一个或多个导致以下电源管理断言设置在"powerd"内.请注意下面的"powerd"行...
% pmset -g assertions
10/7/12 11:51:47 AM EDT
Assertion status system-wide:
PreventUserIdleDisplaySleep 1
CPUBoundAssertion 0
PreventSystemSleep 0
PreventUserIdleSystemSleep 0
ExternalMedia 0
UserIsActive 0
ApplePushServiceTask 0
BackgroundTask 0
Listed by owning process:
pid 18(powerd): [0x00000005000001d7] 11:24:18 PreventUserIdleDisplaySleep named: "com.apple.powermanagement.delayDisplayOff"
... etc. ...
Run Code Online (Sandbox Code Playgroud)
这些程序退出并将这种电源管理断言留在"powerd"中,并且它永远保持活跃状态.这可以防止"显示睡眠"和屏幕保护程序被调用.
在这种情况下我知道的唯一选项(除了重新启动)是在"powerd"进程上执行"kill -HUP".这会导致守护程序退出并重新启动而不会出现错误的断言.
有没有人知道10.8.2下的方法让我在"powerd"中清除"PreventUserIdleDisplaySleep"断言,而不强制重启该守护进程?如果需要,我很高兴通过Cocoa,Carbon或AppleScript程序来完成这项工作.
我知道IOPMLib,但该库中的例程似乎只能清除在同一进程中创建的幂断言.我需要一种方法来告诉外部和已经运行的"powerd"进程清除它管理的"PreventUserIdleDisplaySleep"断言.有没有人知道在运行的"powerd"实例中外部设置和清除电源管理断言的API?也许是通过某种通知...... ???
我以标准的方式在Java中使用断言,在我的IDE中打开它们.所以他们不是生产发布的一部分.最近我一直在看代码示例,throw new AssertionError()我开始考虑AssertionError应该使用的情况而不是断言.
我的猜测主要区别在于断言的可选性,因此它们不会降低生产性能,因此它们可以在代码中经常出现,但修复用户报告的难以再现的错误则更难.
因为AssertionError,恰恰相反.
我还发现AssertionError在执行不应该得到的代码中更实用,而不是使用assert false //We should not be here.特别是如果需要返回值.例如:
int getFoo(AnEnum a){
if (a == AnEnum.ONE)
return bar();
else if (a == AnEnum.TWO)
return SOME_VALUE;
//else
assert false; //throw new AssertionError();
return -1; //not necessary when usin AssertionError
}
Run Code Online (Sandbox Code Playgroud)
AssertionError- 应该提供还是仅仅是Error(和断言类型)的事实足以或多或少地确定在发现错误的情况下将提供堆栈跟踪?我使用 Django Rest Framework APIClient 对 Django API 进行了一些单元测试。API 的不同端点返回自定义错误消息,其中一些带有格式化字符串,例如:'Geometry type "{}" is not supported'。
我断言来自客户端响应和错误消息键的状态代码,但在某些情况下,我想弄清楚返回了什么错误消息,以确保没有其他原因导致该错误。
所以我也想根据原始的未格式化字符串验证返回的错误消息。例如,如果我收到类似 的错误消息'Geometry type "Point" is not supported',我想检查它是否与原始未格式化的消息匹配,即'Geometry type "{}" is not supported'。
目前我想到的解决方案:
首先:用正则表达式模式替换原始字符串中的括号,然后查看它是否与响应匹配。
第二:(很酷的想法,但在某些情况下可能会失败)使用difflib.SequenceMatcher并测试相似度是否大于例如 90%。
这是一个例子:
有许多dict错误消息,每个错误都会从中选择相关消息,根据需要添加格式参数,然后引发错误:
ERROR_MESSAGES = {
'ERROR_1': 'Error message 1: {}. Do something about it',
'ERROR_2': 'Something went wrong',
'ERROR_3': 'Check you args: {}. Here is an example: {}'
}
Run Code Online (Sandbox Code Playgroud)
现在,我的 DRF 序列化器在处理请求期间发生错误,并引发错误:
try:
some_validation()
except SomeError as …Run Code Online (Sandbox Code Playgroud) 我喜欢扩展我的Assert.AreEqual到许多不同的类,当然已知的是CollectionAssert,但我可以想到更多如:ImageAssert,XmlAssert等.
您是否创建了自己的Assert类?你想创造什么样的新品?
我知道如何检查某个属性是否订购了一个集合:
Assert.That(actual, Is.Ordered.By("Foo"));
Run Code Online (Sandbox Code Playgroud)
如何断言实际包含此特定顺序的元素(1,2,5,3,4)(无需编写自定义比较器).
我正在看PHPUnit,以下让我感到疑惑.PHPUnit是否处理int.1和0是否为布尔值?在我目前的测试中,它没有.
例: $this->assertTrue(preg_match('/asdf/', 'asdf'));
在我的测试中,这失败了,因为preg_match()返回int 1或0并且只有bool false才会出现错误.
显然,我接受以下工作,因为比较总是返回bool. $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);
我是否在preg_match中遗漏了一些东西,或者我的断言使它变得不那么严格了?
编辑:assertTrue是否需要匹配类型?有没有办法让断言不那么严格?
在specs2测试中,如何验证函数返回值的类型?
说,功能:
trait P
trait C1 extends P
trait C2 extends P
def test(n:Int): P = if(n%2==0) new C1 else new C2
Run Code Online (Sandbox Code Playgroud)
测试:
"test" should {
"return C1 when n is even" in {
val result = test(2)
// how to assert
// 'result' should have type of C1?
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何断言价值的类型result?
我有一个在多个函数中使用相同类型保护的类;像这样:
function validData(d: Data | null): d is Data {
return d !== null;
}
class C {
data: Data | null;
public doA() {
if (!validData(this.data))
throw new Error("Invalid data");
/* … */
}
public doB() {
if (!validData(this.data))
throw new Error("Invalid data");
/* … */
}
}
Run Code Online (Sandbox Code Playgroud)
我可以重构此代码以将错误移到类型保护中吗?像这样的东西:
function assertData(d: Data | null): ??? {
if (d === null)
throw new Error("Invalid data");
}
Run Code Online (Sandbox Code Playgroud)
...我可以这样使用:
class C {
data: Data | null;
public doA() {
assertData(this.data);
/* … …Run Code Online (Sandbox Code Playgroud) 我在我的应用中收到此错误:
***断言失败-[UICollectionView _endItemAnimations],/ SourceCache/UIKit/UIKit-2372/UICollectionView.m:2801
它出现在我的-controllerDidChangeContent:方法中:
[self.collectionView performBatchUpdates:^{...}];
Run Code Online (Sandbox Code Playgroud)
有谁知道是什么原因造成的?我的代码基于https://gist.github.com/4440c1cba83318e276bb,我很茫然.
谢谢!