Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 6测试目标故障_Xcode_Macos_Unit Testing_Testing_Xcode6 - Fatal编程技术网

Xcode 6测试目标故障

Xcode 6测试目标故障,xcode,macos,unit-testing,testing,xcode6,Xcode,Macos,Unit Testing,Testing,Xcode6,我在这里已经讨论了很多问题和答案,最后陷入了困境 现在我对项目代码的状态很满意,我想实现单元测试。所以我添加了一个测试目标,我能让它正确编译吗?不我相信这是件简单的事,但我无法解决 该项目包含2个第三方私有框架 My test target bundle loader参数设置为: $(TEST_HOST) $(BUILT_PRODUCTS_DIR)/My App.app/Contents/MacOS/My App 我的测试目标测试主机参数设置为: $(TEST_HOST) $(BUILT_

我在这里已经讨论了很多问题和答案,最后陷入了困境

现在我对项目代码的状态很满意,我想实现单元测试。所以我添加了一个测试目标,我能让它正确编译吗?不我相信这是件简单的事,但我无法解决

该项目包含2个第三方私有框架

My test target bundle loader参数设置为:

$(TEST_HOST)
$(BUILT_PRODUCTS_DIR)/My App.app/Contents/MacOS/My App
我的测试目标测试主机参数设置为:

$(TEST_HOST)
$(BUILT_PRODUCTS_DIR)/My App.app/Contents/MacOS/My App
当我尝试编译时,会出现如下错误:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_MyArrayController", referenced from:
      objc-class-ref in SMyAppLogicTests.o
我查了一下,在上面找到了这样的答案:

基本上是说我需要将我的类添加到我的测试目标中。这似乎有点挫败了在工作应用程序之上构建的要点,但这又是什么呢。因此,我将所有.m文件添加到测试目标,它将编译!万岁,但是,我有新问题:

Class MyClass is implemented in both /Users/georgebrown/Library/Developer/Xcode/DerivedData/My_App-akedavtbgqpujscilxqmhsvikcku/Build/Products/Debug/My App.app/Contents/MacOS/My App and /Users/georgebrown/Library/Developer/Xcode/DerivedData/My_App-akedavtbgqpujscilxqmhsvikcku/Build/Products/Debug/My App Tests.xctest/Contents/MacOS/My App Tests. One of the two will be used. Which one is undefined.
这是有道理的,如果m文件已经包含在我的应用程序中,为什么我必须将其放入。所以我查了一下,得到了一个让我回到第一位的答案:

我错过了什么?我已经被困了一个星期,只是想在Xcode中实现测试(更不用说Xcode服务器对我的服务器做了什么,我还得弄清楚),当时我计划了3-4天来编写测试,愚蠢地认为这将是一个快速的设置

编辑:我删除了我的测试目标并重新开始。第一件不起作用的事情是它找不到我的第三部分私有框架。因此,我在框架搜索路径中添加了$(PROJECT_DIR)

接下来,我又开始为我的类获取未定义的架构错误符号。我注意到我的包加载程序未设置,所以我将其设置为$(TEST\u HOST),现在测试运行!万岁

现在我不能为运行操作生成,但为测试生成可以工作。。。。。我想是进步吧。我得到架构x86_64的未定义符号:再次出错


我已经通过编辑方案,并在构建中取消选择测试目标的“Run”来解决这个问题。我不确定我是否完全理解该方案应该如何工作,但是,它做到了这一点。

XCTesting的工作原理是在运行时将测试包注入应用程序。当您添加一个新的测试目标时,Xcode负责为您设置所有这些内容:我建议,如果您有一个让您头疼的测试目标,您可以在Xcode中创建一个新的测试目标,并将您的测试用例转移到该目标。 那么你只需要遵循三条规则:

  • 仅将类实现文件添加到应用程序目标,而不添加到 测试任何测试目标。这将防止“在MyApp和MyAppTestCase中都实现了类Foo。将使用其中一个。哪一个是未定义的”警告
  • 仅将XCTestCase文件添加到测试 目标
  • “#导入”测试用例中使用的每个自定义类的头文件