我试图在不同方向使用XCTestCase测试我的iOS应用。我需要一种以编程方式改变方向的方法。我尝试用两种方法做这个,但两者都没有改变方向(方向仍然是UIInterfaceOrientationPortrait)。
尝试1
[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft;`
尝试2
[[UIDevice currentDevice] setValue:[NSNumber numberWithInt:UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"];`
当我阅读[[UIApplication sharedApplication] statusBarOrientation]时 是否有另一种方法可以改变方向以进行测试?
答案 0 :(得分:4)
使用以下解决方案。在设置方法中执行。
[[UIDevice currentDevice] setValue:
[NSNumber numberWithInteger: UIInterfaceOrientationPortrait]
forKey:@"orientation"];
它为我工作。
答案 1 :(得分:3)
这应该可行,我随机改变方向,因为我正在运行多个测试,我希望这是有用的
// Set a random device orientation
let orient = [UIDeviceOrientation.portrait , UIDeviceOrientation.portraitUpsideDown, UIDeviceOrientation.landscapeLeft, UIDeviceOrientation.landscapeRight]
XCUIDevice.shared().orientation = orient[Int(arc4random_uniform(UInt32(orient.count)))]
答案 2 :(得分:0)
我找到的解决方案如下。因此,如前所述,在黑客中更新旋转,并且另外根据新方向强制窗口重新布局。模拟器仍然处于纵向模式,但其中的布局是横向的。这足以在Bot上进行单元测试,如果测试失败,您可以在本地进行调试,并手动正确旋转设备。
- (void)forceDeviceOrientationTo:(UIInterfaceOrientation)orientation
{
[UIDevice.currentDevice setValue:@(orientation) forKey:@"orientation"];
SEL selector = NSSelectorFromString(@"_updateToInterfaceOrientation:duration:force:");
NSMethodSignature* methodSignature = [self.projectViewController.view.window methodSignatureForSelector:selector];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:methodSignature];
invocation.target = self.projectViewController.view.window;
invocation.selector = selector;
[invocation setArgument:&orientation atIndex:2];
double duration = 0.01;
[invocation setArgument:&duration atIndex:3];
BOOL force;
[invocation setArgument:&force atIndex:4];
[invocation invoke];
// give enough time to let the rotation happen
[NSRunLoop.currentRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:duration+0.2]];
}
答案 3 :(得分:0)
快捷代码:
XCUIDevice.shared.orientation = UIDeviceOrientation.portrait;
答案 4 :(得分:0)
如果您想在library(dplyr)
test <- mutate(.data = test,
G5 = case_when(col1 > 5 & col2 > 5 ~ "Yes", #Original
(is.na(col1) & col2 > 5) | (col1 > 5 & is.na(col2)) ~ "Yes",
TRUE ~ "No")) # Everything else gets the value "No"
test
#> col1 col2 G5
#> 1 10 15 Yes
#> 2 2 15 No
#> 3 15 2 No
#> 4 2 2 No
#> 5 NA 15 Yes
#> 6 15 NA Yes
环境中运行设备旋转测试,我目前最知名的策略是:
XCTest
info.plist
部分已完全删除(您不能在生产应用程序中这样做,因为appStore会拒绝它。)Supported interface orientations
并返回-application:supportedInterfaceOrientationsForWindow:
。这将有效地替换以前的UIInterfaceOrientationMaskAll
条目。info.plist
[UIDevice.currentDevice setValue:@(UIDeviceOrientation…) forKey:@"orientation"];
。这样可使动画速度提高100倍,并希望您的测试也能做到。