是否可以让Xcode多次运行单元测试?我在几个单元测试中遇到了一个问题,导致了间歇性的故障。现在我 * 认为 * 我已经修复了它,我唯一的选择似乎是mash + U,直到我有95%的信心bug消失。我知道其他的单元测试框架使得多次运行单个测试、测试用例或测试套件变得相当容易。我们在XCTest中有这种奢侈吗?
mftmpeh81#
对我来说,它的工作在迅速
override func invokeTest() { for time in 0...15 { print("this test is being invoked: \(time) times") super.invokeTest() } }
mm5n2pyu2#
尝试重写调用测试:https://developer.apple.com/documentation/xctest/xctestcase/1496282-invoketest?language=objc
- (void)invokeTest { for (int i=0; i<100; i++) { [super invokeTest]; } }
t1rydlwq3#
它可能会帮助你
func testMultiple() { self.measureBlock() { ... XCTAssert(errMessage == nil, "no error expected") } }
这将多次运行self.measureBlock()中的代码,以测量平均时间。更改代码是一项工作,但无论如何您可能都想知道执行时间。这个答案可能足够接近你想要的,而且很容易做到。
a64a0gku4#
另一种方法是通过命令行来完成,你可以使用-only-testing参数运行一个测试,并且避免使用test-without-building进行构建。
-only-testing
test-without-building
for i in {1..10}; \ do xcodebuild \ test-without-building \ -workspace MyApp.xcworkspace \ -scheme Debug \ -destination 'platform=iOS Simulator,OS=11.2,name=iPhone 8' \ -only-testing:MyApp.Tests/TestFile/myTest; done
taor4pac5#
尝试使用for循环:
for
func testMultiple() { for _ in 0...100 { ... XCTAssert(errMessage == nil, "no error expected") } }
注意,这在self.measureBlock()中不起作用。但是,您可以在measureBlock()中调用此函数:
self.measureBlock()
measureBlock()
func testMultiple() { for _ in 0...100 { ... XCTAssert(errMessage == nil, "no error expected") } } func testPerformance() { self.measureBlock() { self.testMultiple() } }
Xcode 8运行measureBlock代码10次。
measureBlock
siotufzp6#
我过去使用invokeTest()覆盖(Xcode 10)非常成功。但是现在在Xcode 11中它不起作用(至少对我来说)。我最终做的是:
invokeTest()
func test99Loop() { for i in 0..<LOOP_COUNT { if i > 0 { tearDown(); sleep(1); setUp() } test3NineUrls() do { tearDown(); sleep(1) } setUp() test6NineCombine() print("Finished Loop \(i)") } }
我显然使用setup/teardown,这是多次执行这些操作的正确方法(因为第一次和最后一次都是由Xcode调用的)。
7cjasjjr7#
现在您可以在Xcode中执行此操作编辑测试计划。在“测试导航器”的顶部,您应看到“测试计划:MyAppName(默认)"。点击此按钮并选择“编辑测试计划”。在编辑器中,依次选择“配置”、“配置1在测试执行下,可设置测试重复模式和最大测试重复次数。从菜单产品〉测试运行测试
7条答案
按热度按时间mftmpeh81#
对我来说,它的工作在迅速
mm5n2pyu2#
尝试重写调用测试:https://developer.apple.com/documentation/xctest/xctestcase/1496282-invoketest?language=objc
t1rydlwq3#
它可能会帮助你
这将多次运行self.measureBlock()中的代码,以测量平均时间。
更改代码是一项工作,但无论如何您可能都想知道执行时间。
这个答案可能足够接近你想要的,而且很容易做到。
a64a0gku4#
另一种方法是通过命令行来完成,你可以使用
-only-testing
参数运行一个测试,并且避免使用test-without-building
进行构建。taor4pac5#
尝试使用
for
循环:注意,这在
self.measureBlock()
中不起作用。但是,您可以在
measureBlock()
中调用此函数:Xcode 8运行
measureBlock
代码10次。siotufzp6#
我过去使用
invokeTest()
覆盖(Xcode 10)非常成功。但是现在在Xcode 11中它不起作用(至少对我来说)。我最终做的是:我显然使用setup/teardown,这是多次执行这些操作的正确方法(因为第一次和最后一次都是由Xcode调用的)。
7cjasjjr7#
现在您可以在Xcode中执行此操作
编辑测试计划。在“测试导航器”的顶部,您应看到“测试计划:MyAppName(默认)"。点击此按钮并选择“编辑测试计划”。
在编辑器中,依次选择“配置”、“配置1
在测试执行下,可设置测试重复模式和最大测试重复次数。
从菜单产品〉测试运行测试