Swift3 XCTest中的Xcode8/Swift 3不再按字母顺序运行

Swift3 XCTest中的Xcode8/Swift 3不再按字母顺序运行,swift3,xcode8,xctest,Swift3,Xcode8,Xctest,XCTest无法按顺序对方法进行排序,因此我在方法的命名约定中使用了一个老技巧来强制执行测试顺序: testHomePage testLogin 到 以前在Xcode 7 Swift 2.2中使用的 在Xcode 8/Swift 3中,这似乎不再有效了!那么Xcode 8/Swift 3就没有字母顺序、顺序或任何排序逻辑了 我和我的团队研究了修改pbx/xml文件的可能性,但也没有什么可编辑的。有人对如何强制测试以特定顺序运行有什么建议吗?我会重构以避免强制执行顺序的需要。即使这些是UI测试,

XCTest无法按顺序对方法进行排序,因此我在方法的命名约定中使用了一个老技巧来强制执行测试顺序:

testHomePage
testLogin

以前在Xcode 7 Swift 2.2中使用的

在Xcode 8/Swift 3中,这似乎不再有效了!那么Xcode 8/Swift 3就没有字母顺序、顺序或任何排序逻辑了


我和我的团队研究了修改pbx/xml文件的可能性,但也没有什么可编辑的。有人对如何强制测试以特定顺序运行有什么建议吗?

我会重构以避免强制执行顺序的需要。即使这些是UI测试,而不是单元测试,在我看来同样的原则也适用:每个新的测试都应该从一个新的系统开始

例如,重构逻辑以登录(无需任何测试),并在需要登录用户的所有测试中使用该逻辑。您还需要一种在某种意义上“重置”系统的方法——因此,在您的情况下,可能需要注销用户。根据我的经验,从
setup
方法调用此函数比从
teardown
方法调用此函数更好,因为如果测试因任何原因意外停止,您的下一次测试运行将始终失败


这种方法的缺点是,您的测试将需要更长的时间运行,因为您的应用程序将反复登录和注销,但这一事实应该鼓励您只关注UI,并保持更精细的逻辑细节(用户名字符串长度、密码有效性等)在您的单元测试中。

我将进行重构,以避免强制执行排序的需要。即使这些是UI测试,而不是单元测试,在我看来同样的原则也适用:每个新的测试都应该从一个新的系统开始

例如,重构逻辑以登录(无需任何测试),并在需要登录用户的所有测试中使用该逻辑。您还需要一种在某种意义上“重置”系统的方法——因此,在您的情况下,可能需要注销用户。根据我的经验,从
setup
方法调用此函数比从
teardown
方法调用此函数更好,因为如果测试因任何原因意外停止,您的下一次测试运行将始终失败


这种方法的缺点是,您的测试将需要更长的时间运行,因为您的应用程序将反复登录和注销,但这一事实应该鼓励您只关注UI,并保持更精细的逻辑细节(用户名字符串长度、密码有效性等)在您的单元测试中。

我们找到了一个解决方案,可以帮助您确定UI测试的执行顺序

  • 使用gitlab
  • 在yml中创建多个测试目标
  • 如果测试需要按特定顺序运行,则将它们封装在gitlab.yml中
  • 以下是一个单独运行的测试示例和另一个需要顺序排序的测试示例:

    test_search:
    stage: test
    tags:
     - ios
    script:
     - xcodebuild test-without-building -workspace company.xcworkspace -scheme yourcompany -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' -only-testing:Test/testSearch
    
    test_profile_and_edit:
    stage: test
    tags:
     - ios
    script:
     - xcodebuild test-without-building -workspace company.xcworkspace -scheme your company -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' -only-testing:Test/testProfile
     - xcodebuild test-without-building -workspace company.xcworkspace -scheme your company -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' -only-testing:Test/testProfileEdit
    

    如果您有需要登录的场景,请在安装程序中包括覆盖方法,以检查用户是否登录。

    我们找到了一个解决方案,可以帮助您确定UI测试执行顺序

  • 使用gitlab
  • 在yml中创建多个测试目标
  • 如果测试需要按特定顺序运行,则将它们封装在gitlab.yml中
  • 以下是一个单独运行的测试示例和另一个需要顺序排序的测试示例:

    test_search:
    stage: test
    tags:
     - ios
    script:
     - xcodebuild test-without-building -workspace company.xcworkspace -scheme yourcompany -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' -only-testing:Test/testSearch
    
    test_profile_and_edit:
    stage: test
    tags:
     - ios
    script:
     - xcodebuild test-without-building -workspace company.xcworkspace -scheme your company -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' -only-testing:Test/testProfile
     - xcodebuild test-without-building -workspace company.xcworkspace -scheme your company -destination 'platform=iOS Simulator,name=iPhone 7,OS=latest' -only-testing:Test/testProfileEdit
    

    如果您有需要登录的场景,请在安装程序中包括覆盖方法,以检查用户是否登录。

    出于兴趣,为什么要按特定顺序运行测试?我想说,如果您的测试相互依赖,这是一个坏主意。您是否实现了设置方法?这通常是你所需要的,以防止需要一个特定的sequence@ganzogo在上面的示例中,我演示了一种执行健全性测试的blackbox UI自动化方法。如果不先进入登录视图,我就无法进入主页。也许我写上面例子的方式不清楚。我想说的是,如果我在1个类中有上面列出的2个方法,并且我希望这些方法以特定的顺序执行,我该如何执行?@GerdCastan我在基类中有setUp()方法,在测试类中又有一个override func setUp(),以在测试方法之间执行该测试特有的一些附加操作。有没有一种方法可以在设置方法中指定顺序?也就是添加这个车队。我知道顺序顺序违背了单元测试的目的。然而,这种单元测试方法不适用于UI测试。出于兴趣,为什么您希望测试按特定顺序运行?我想说,如果您的测试相互依赖,这是一个坏主意。您是否实现了设置方法?这通常是你所需要的,以防止需要一个特定的sequence@ganzogo在上面的示例中,我演示了一种执行健全性测试的blackbox UI自动化方法。如果不先进入登录视图,我就无法进入主页。也许我写上面例子的方式不清楚。我想说的是,如果我在1个类中有上面列出的2个方法,并且我希望这些方法以特定的顺序执行,我该如何执行?@GerdCastan我在基类中有setUp()方法,在测试类中又有一个override func setUp(),以在测试方法之间执行该测试特有的一些附加操作。有没有一种方法可以在设置方法中指定顺序?也就是添加这个车队。我知道顺序顺序违背了单元测试的目的。然而,这种单元测试方法并不适用于UI测试。我可以欣赏重构后的代码,这些代码仅用于测试目的。我们已经详细讨论了这种方法。我们的结论是,我们测试的是黑客版本的代码,因此结果是不准确的。端到端测试的全部工作就是这样,端到端。我们希望能够创造真实世界的条件。这个di