gpt4 book ai didi

iphone - iOS 单元测试 : How to set/update/examine firstResponder?

转载 作者:IT王子 更新时间:2023-10-29 08:14:13 24 4
gpt4 key购买 nike

如何编写急救单元测试?

我正在尝试编写一个测试来确认一个方法将焦点推进到下一个文本字段。 controllerUIViewController 的后代。但是这个探索性测试失败了:

- (void)testFirstResponder
{
[controller view];
[[controller firstTextField] becomeFirstResponder];

STAssertTrue([[controller firstTextField] isFirstResponder], nil);
}

第一行导致加载 View ,以便其 socket 就位。文本字段非零。但测试从未通过。

我猜想 becomeFirstResponder 不会立即设置第一响应者,而是安排稍后设置。那么有没有什么好的方法可以针对它编写单元测试呢?

从已接受答案的评论中提取答案......让事情运行一小段时间:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]];

我还发现我需要创建一个 UIWindow 并将 View Controller 的 View 放入其中,如投票最多的答案中所述。

最佳答案

使用 Xcode 5.1 和 XCTestCase,这似乎工作正常:

- (void)testFirstResponder
{
// Make sure the controller's view has a window
UIWindow *window = [[UIWindow alloc] init];
[window addSubview:controller.view];

// Call whatever method you're testing
[controller.textView becomeFirstResponder];

// Assert that the desired subview is the first responder
XCTAssertTrue([sut.textView isFirstResponder]);
}

为了使 View / subview 成为第一响应者,它必须是 View 层次结构的一部分,这意味着它的 Root View 的窗口属性必须设置。

Jon 和 Sergio 提到在你想要的 subview 上调用 becomeFirstResponder 之后你可能需要调用 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate date]],但我发现这在我们的实例中不是必需的。

但是,您的里程可能会有所不同(甚至取决于您使用的 Xcode 版本),因此您可能需要也可能不需要包含此类调用。

关于iphone - iOS 单元测试 : How to set/update/examine firstResponder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com