小编aki*_*don的帖子

为什么将NSString对象传递给XCTAssertTrue的"format"参数会导致构建错误?

在尝试使用XCTest测试我的应用程序时,执行以下操作时出现构建错误:

#import <XCTest/XCTest.h>

@interface MyTests : XCTestCase

@end

@implementation MyTests

- (void)testExample
{
    NSString *str = @"foo";
    XCTAssertTrue(YES, str); // Parse issue: Expected ')'
}

@end
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,我不会得到构建错误:

#import <XCTest/XCTest.h>

@interface MyTests : XCTestCase

@end

@implementation MyTests

- (void)testExample
{
    XCTAssertTrue(YES, @"foo"); // this is just fine...
}

@end
Run Code Online (Sandbox Code Playgroud)

我得到的构建错误是:

Parse issue: Expected ')' 
Run Code Online (Sandbox Code Playgroud)

它在"str"中的"s"下面放了一个箭头.

我发现我可以通过改变来解决这个问题

XCTAssertTrue(YES, str)
Run Code Online (Sandbox Code Playgroud)

XCTAssertTrue(YES, @"%@", str)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚为什么会产生影响.有人可以解释为什么会这样吗?

macos xcode objective-c ios xctest

21
推荐指数
1
解决办法
4973
查看次数

如何断言文本字段为空?

我的 UI 上有一个空文本字段,但它foo在情节提要中设置了一个占位符文本(其值为)。在我的 UI 测试中,我试图检查它的文本值是否以空开始,但是当我查询它的值时,它似乎给了我占位符值:

func testTextFieldInitiallyEmpty {
  let input = XCUIApplication().textFields["My Text Field"]
  XCTAssertEqual(input.value as! String, "")
}
Run Code Online (Sandbox Code Playgroud)

由于测试失败并显示此消息:

XCTAssertEqual 失败:("foo") 不等于 ("")

当然,foo是占位符值,但它不是该文本字段的文本值。如果我写了这样的错误信息,我会预料到:

XCTAssertEqual(input.placeholderValue as! String, "")
Run Code Online (Sandbox Code Playgroud)

input是 a XCUIElement,它实现了XCUIElementAttributes,所以我看不到其他任何东西可以在这里起作用。

如何检查(断言)文本字段为空?

故事板 属性检查器

编辑

做一些进一步的研究和尝试以下使用的建议后input的的性能accessibilityValuelabel以及title,我还没有找到任何解决方案,这将使我的文本字段的文本值时,有文字,和一个空字符串时,只有占位符是可见的。

这似乎是 (a) 一个错误,或 (b) 来自测试框架的一个有问题的设计决策,不提供这种能力。至少,XCUIElementAttributes#value的文档对我来说似乎不够,因为唯一的细节是:

值的确切类型因元素类型而异。

仍在寻找更好的解决方案......

ios swift xcuitest

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

获取Objective-C中指定类的NSArray的所有对象

我有一个包含可能不同类的对象的数组,例如:

NSArray *multiClassArray = @[@"foo", @42, @"bar"];
Run Code Online (Sandbox Code Playgroud)

我想得到一个新数组,其中包含multiClassArray其类的所有对象,比如说NSString.

有没有比循环每个项更优雅的方法multiClassArray,检查它的类,并适当地将它存储在一个新的数组中?

objective-c nsarray

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

标签 统计

ios ×2

objective-c ×2

macos ×1

nsarray ×1

swift ×1

xcode ×1

xctest ×1

xcuitest ×1