Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.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
如何在iOS上对不应公开的功能进行单元测试?_Ios_Objective C_Iphone_Unit Testing_Swift - Fatal编程技术网

如何在iOS上对不应公开的功能进行单元测试?

如何在iOS上对不应公开的功能进行单元测试?,ios,objective-c,iphone,unit-testing,swift,Ios,Objective C,Iphone,Unit Testing,Swift,我有一个plist文件,其中包含一个顶级字典,该字典包含一个字符串数组 我想测试: 这本字典不是零 数组不是零 数组中至少有一个有效的字符串对象 这些单元测试运行得非常好。非常解耦。但问题是我必须公开类函数,以便Xcode XCTest能够测试它们。这3个函数只是帮助函数,用于获取我们需要的实际数据 在保持测试的同时,如何在这些助手函数上使用适当的可见性?没有人需要知道这3个函数,但我希望对它们进行测试。有两个可靠的选项: 创建第二个.h文件,名为MyClass\u TestHelpers.h,

我有一个plist文件,其中包含一个顶级字典,该字典包含一个字符串数组

我想测试:

  • 这本字典不是零
  • 数组不是零
  • 数组中至少有一个有效的字符串对象
  • 这些单元测试运行得非常好。非常解耦。但问题是我必须公开类函数,以便Xcode XCTest能够测试它们。这3个函数只是帮助函数,用于获取我们需要的实际数据


    在保持测试的同时,如何在这些助手函数上使用适当的可见性?没有人需要知道这3个函数,但我希望对它们进行测试。

    有两个可靠的选项:

  • 创建第二个
    .h
    文件,名为
    MyClass\u TestHelpers.h
    ,您可以在其中声明所需的方法
  • 在类上创建一个名为“TestHelpers”的类别

  • 两者的作用基本相同:在另一个
    .h
    文件中声明方法。在这两种情况下,只需将
    .h
    文件包含在测试类中即可。这样,这些方法只会暴露在您的测试中。

    您确定应该这样做吗?请看这里的第二个答案:我明白您的意思-只测试公共API。但是当我想测试一个Plist是否存在时呢?也许有人不小心把它从项目中删除了。如果是这样,我会立即知道问题出在哪里。这不是一个公共api函数,但仍然需要测试(我认为)。你怎么认为?