2014-11-01 115 views
51

我有一个问题,Xcode IDE 6没有正确检测到我的swift单元测试用例。当我运行单元测试时,所有的测试都被执行了。Xcode 6编辑器无法识别单元测试

但是在编辑单元测试的IDE中无法识别。我必须运行整个单元测试套件才能运行单个测试。

我想不出我是如何避免这个故障。

enter image description here

+3

我有同样的问题。尚无解决方案。在测试导航器中,我可以看到图标运行单个测试。但是,如果我通过单击这样一个图标来运行单个测试,则将执行所有测试,而不是仅单击我单击的那个测试。 – 2014-11-04 09:08:55

+1

我的项目越发壮大,越糟糕。我在许多swift文件中没有IntelliSense。我希望,这些错误将会被更多版本的Xcode修复。 – ChaosSpeeder 2014-11-08 18:19:47

+1

认真考虑直接在VIM中工作。 – Aaron 2016-03-02 14:35:33

回答

54

问题解决了。我所要做的就是启动“窗口 - >项目”窗口并删除“派生数据。索引后所有测试正在工作。

与此同时,苹果正在修复Xcode 6.3编辑器中的错误。

+3

在我的版本(6.2)下它的文件 - >项目设置 – styler1972 2015-04-01 14:55:18

+1

没有为我解决(6.4) – Daniel 2015-08-20 09:12:19

+7

在Xcode 7中为我工作。必须在删除派生数据后关闭Xcode,然后重启。 – 2015-09-29 00:04:52

3

(因为您的评论表示您仍然有一个星期后,这个问题,这可能帮不了你,但是......)

我就遇到了这个问题,即增加一个新的(SWIFT) 6.1中的测试不会让它显示在“测试导航器”或方案编辑器中 - 重新启动Xcode解决了问题,现在我可以单独运行测试。

+0

谢谢,重新启动并没有解决我的问题,我也在其他类的swift中。我相信我的项目设置与几个框架套件和扩展导致这种行为。 – ChaosSpeeder 2014-11-15 08:41:28

+0

修复了我的问题......哦Xcode ... – lehn0058 2016-10-05 14:47:43

2

我有一个类似的错误(尽管在Objective C中,不是快捷)。如果我为这个类添加了一个新的测试方法,新的方法不会显示在测试导航器中,也不会在我运行整个包时执行。我也不会在每个方法旁边的边栏中获得这些点,如果点击它,只会运行一种测试方法。

唯一解决我的问题是删除我的整个测试类(暂时保存其他内容)然后重新创建测试类和(也许更仔细?)再次设置构建设置。

13

对我来说,“修复”是添加一个新的测试。我做了一些废话:

func testThatNothing() { 
    XCTAssertTrue(true, "True should be true") 
} 

当我再次运行测试,在该文件中所有的测试是由编辑认可。我删除了这个虚假测试,这一切都还好。不幸的是我不得不在每个文件中都这样做,但至少它是有效的。希望这可以帮助某人。

+1

谢谢。看看我的答案。问题是过了一段时间内部派生的数据文件被搞乱了。您必须在一段时间后删除它们以执行重新处理或重新索引。 – ChaosSpeeder 2015-03-20 17:07:03

+1

这应该被标记为答案 – Max 2016-08-04 16:15:38

6

我有同样的问题了。只要确保您的每一个测试用例有某种XCTAssert()语句。

func testSomething(){ 
    XCTAssert(true, "Pass") 
} 
+0

对该文件的任何编辑都适用于我。在文件中保留'XCTAssert'不会自动使它们被Xcode识别。 – 2015-06-03 19:31:30

+0

好笑。我试过了,它没有像预期的那样工作,因为我已经有了名字为'test'的方法。但是,我在测试文件中有一个私有方法,并且通过评论说测试导航器中的测试再次显示它们是自测的。然后我取消注释,一切恢复正常。错误。 – JJacquet 2015-12-11 21:38:06

18

对我来说,伦敦定盘前面加上“测试”

所有方法

ie

func arrayResponseCall() 

应该是:

func testArrayResponseCall() 
+0

谢谢,但命名前缀是所有测试功能的要求。看看我的示例,其中方法名称是testExample()。从Xcode 6.3开始,这个bug已经被苹果解决了。 – ChaosSpeeder 2015-06-24 15:54:35

+0

这给我修好了。这应该在文档中更清晰。我花了一个多小时试图找到这个bug! – Sethmr 2016-12-21 00:18:34

+0

区分大小写!我尝试了30分钟,直到我注意到我写了“Test ..”而不是“test ..” – nablahero 2017-05-30 12:33:22

1

有时候,你需要做的是等待的Xcode来完成索引的所有文件。对于大型项目,我的单元测试导航器视图通常是空的,直到完成。

+0

另外,有时您需要从目标中删除测试类并重新添加它。 – 2015-08-31 09:04:24

3

的Xcode 7

我完全的答案是here

在Xcode 7中获取单元测试的设置比在Xcode 6中容易一些(不需要将类和方法注释为public)。在导入类名前使用@testable

import XCTest 
@testable import MyProject 

class MyClassTests: XCTestCase { 

    func testMyMethod() { 

     let myClass = MyClass() 
     let sum = myClass.addTwoNumbers(1, 2) 

     XCTAssertEqual(sum, 3) 
    } 
} 

在你的课堂上,你不必做任何特别的事情。

class MyClass { 

    func addTwoNumbers(a: Int, b: Int) -> Int { 
     return a + b 
    } 
} 

您可能还需要在应用的构建设置下将“包装”下的“定义模块”设置为YES。

又见这些问题的答案:

7

下面是针对此问题的解决方案很少:

  1. 等待一段时间。有时需要花费时间加载钻石。 在不同文件之间导航,然后移动到它应该出现的相同测试案例

  2. 清理工程,清理生成文件夹乃至删除派生的数据内容。检查这个how to delete derived data safely.

  3. 退出Xcode并再次打开它。

  4. 确保您测试用例的名字开始testFunc_Name

  5. 有时候你测试用例文件可能包含比测试用例等功能。在这种情况下,菱形符号不会出现。 Remove such function.

在我的情况下,1,3和5解决方案通常为我工作。

+0

3.是解决方案! – kmak 2016-04-03 14:25:47

+0

删除派生数据并重新启动XCode为我工作 – eliasbagley 2016-06-03 16:21:23

1

对我来说,选择Product->Test就足够了,稍等一下。当测试刚刚开始运行时,所有钻石都可用

3

确保测试用例名称以“test”开头,后面跟着您想要创建的任何名称(cmd + B)项目。钻石将出现!!。

+0

只要您更改为在函数名称中包含测试,它就会显示出来。傻我.. – 2017-01-23 10:56:41

1

当您添加一个新的测试,保存文件(加利福尼亚+ S)和钻石会出现

1

(上的Xcode 7.3验证)对于我来说,我需要测试增加了以下这里enter image description here

0

我解决了我的问题,只是将private方法变为public

所以,如果这是你面临同样的problema,开关:

private func testString() 

到:

public func testString()