Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Swift 什么';将目标导入单元测试和将该文件包含在目标成员中有什么区别?_Swift_Xcode_Unit Testing - Fatal编程技术网

Swift 什么';将目标导入单元测试和将该文件包含在目标成员中有什么区别?

Swift 什么';将目标导入单元测试和将该文件包含在目标成员中有什么区别?,swift,xcode,unit-testing,Swift,Xcode,Unit Testing,当我编写测试时,我可以: @testable import TestProduct 上述操作与将测试文件添加到特定目标有何区别 最终我的问题是:如果我将我的单元测试作为我所有文件的目标…这是否等同于: @testable import TestProduct 如果没有,那有什么区别呢?亲爱的@可测试导入您的AppModuleName存在于您的测试-单元测试中。这将向您的测试公开任何公共和默认符号。专用符号仍然不可用。这是在生成设置中 在测试目标中创建一个新文件,并将其命名为MyFirstS

当我编写测试时,我可以:

@testable import TestProduct
上述操作与将测试文件添加到特定目标有何区别

最终我的问题是:如果我将我的单元测试作为我所有文件的目标…这是否等同于:

@testable import TestProduct

如果没有,那有什么区别呢?

亲爱的@可测试导入您的AppModuleName存在于您的测试-单元测试中。这将向您的测试公开任何公共和默认符号。专用符号仍然不可用。这是在生成设置中

在测试目标中创建一个新文件,并将其命名为MyFirstSpec.swift。 把这个内容放进去。 或 创建一个框架目标。如果您不太喜欢复制文件,那么可以创建一个框架目标,其中包含要测试的源文件。 此外,您还可以在github上参考以下内容以实现自动化:

标题下的单元测试目标访问级别(重点已添加)

当您编写具有单元测试目标的应用程序时,您的应用程序中的代码需要提供给该模块才能进行测试。默认情况下,其他模块只能访问标记为“打开”或“公共”的实体。但是,如果使用@testable属性标记产品模块的导入声明,并在启用测试的情况下编译该产品模块,则单元测试目标可以访问任何内部实体

这些文档说@testable属性为您的单元测试目标提供了对标记为@testable的模块所有内部的访问。因此,您无需手动将该模块中的单个文件添加到单元测试目标

@testable导入通常是在大型代码基上完成的,而大型代码基没有 有什么测试吗。。。因为这种方法要慢得多 而不是将要测试的文件添加到测试目标

目标是通过在Xcode中运行“build”创建的最终产品。可能吧 可以是应用程序、框架、静态库或单元测试包

因此,无论您将哪个文件添加到特定目标,它都会由xcode构建并添加到该目标的最终产品中

因此,为了回答您的问题,如果您将上述文件添加到您的测试目标中,那么您的测试目标中的文件将可以访问该文件,而无需导入模块TestProduct,并且它将被复制到您的测试包产品目录中

当您编写下面这行代码时,它所做的只是使您的测试目标能够访问TestProduct的内部文件

@testable import TestProduct

因此,如果您将该文件添加到两个目标中,它将为每个目标生成两次,并且还将复制到各自的产品目录中,这是真正不需要的浪费。

谢谢Aaron,我已经编辑了这个问题,您可以看一看吗?此上下文中的模块是否意味着
target
?ie
FaceBookQA
FacebookStage
?不,这并不意味着目标。在此上下文中,Swift中的模块是源代码的高级封装机制。目标是Xcode组织/打包功能。可以推荐访问控制部分:单元测试目标是Xcode(因为缺乏更好的定义)。Swift
模块
,是一种Swift语言级别的访问控制机制。感谢Ash,我已经编辑了这个问题,你能看一下吗?我已经编辑了这个问题,你能看一下吗?我想我的答案中已经涵盖了所有内容。因此,如果你将该文件添加到两个目标中,它将为每个目标生成两次,并且还将复制到各自的产品目录中,这是浪费,实际上并不需要。有趣。但是,如果我只是将每个文件添加到我的testTarget中,而不是执行
@testable import TestProduct
,我会一切都好吗?提到的这两个文件是否有效场景100%相同?您的测试目的将在这两个场景中得到实现,但它们所采用的路径在重复编译和将源代码复制到测试包方面是不同的。所以,理想情况下,第一种方法是您应该始终遵循的方法。