我单元测试的一些代码需要加载资源文件.它包含以下行:
NSString *path = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"txt"];
Run Code Online (Sandbox Code Playgroud)
在应用程序中它运行得很好,但是当单元测试框架运行时pathForResource:返回nil,意味着它找不到foo.txt.
我已经确定它foo.txt包含在单元测试目标的Copy Bundle Resources构建阶段中,为什么它找不到该文件呢?
我有兴趣了解导致开发人员覆盖+初始化或+加载的情况.文档清楚地表明Objective-C运行时为您调用了这些方法,但这些方法的文档中确实清楚了.:-)
我的好奇心来自于Apple的示例代码 - MVCNetworking.他们的模型类有一个+(void) applicationStartup方法.它在文件系统上做一些内务处理,读取NSDefaults等等......并且,在尝试了解NSObject的类方法之后,似乎这个清洁工作可能可以放入+ load.
我确实修改了MVCNetworking项目,将App Delegate中的调用删除到+ applicationStartup,并将管家位置放入+ load ...我的计算机没有着火,但这并不意味着它是正确的!我希望能够理解你需要调用的自定义设置方法与+ load或+ initialize之间的任何细微之处,陷阱和其他内容.
对于+ load文档说:
加载消息将发送到动态加载和静态链接的类和类别,但前提是新加载的类或类别实现了可以响应的方法.
如果你不知道所有单词的确切含义,那么这句话很难解析.救命!
什么是"动态加载和静态链接?" 某些东西可以动态加载和静态链接,还是它们是互斥的?
"......新加载的类或类实现了一个可以响应的方法"什么方法?回应怎么样?
至于+ initialize,文档说:
初始化它每个类只调用一次.如果要对类和类的类别执行独立初始化,则应实现加载方法.
我的意思是,"如果你试图设置类......不要使用初始化." 好的.何时或为什么我会覆盖初始化呢?
我正在尝试使用TDD和新的XCTest框架编写iOS应用程序.我的一个方法从Internet检索文件(给定NSURL对象)并将其存储在用户的文档中.该方法的签名类似于:
- (void) fetchAndStoreImage:(NSURL *)imageUrl
Run Code Online (Sandbox Code Playgroud)
我正在尝试为这种方法编写测试,如果没有连接到互联网就不会失败.我的方法(取自上一个问题)是使用NSURL将方法调用到本地文件系统中的图像.
当创建启用了单元测试的新项目时,Tests目录有一个名为"Supporting Files"的子目录.我想这是我的测试图像应该去的地方.我的问题是如何获得指向此目录中的图像的NSURL对象,因为我不希望测试图像与应用程序捆绑在一起.任何帮助表示赞赏.
我是否可以在XCTest中调用API调用setUP()或tearDown()以在测试之间重置应用程序?我查看了XCUIApplication的点语法,我看到的只是.launch()
或者有没有办法在Swift中调用shell脚本?然后我可以调用xcrun中间的测试方法来重置模拟器.
我曾经问过一个与XCTests有关的问题。在一个答案中,我被告知,在运行单元测试(至少在iOS开发中)时,使用单独的测试目标(主应用程序除外)是一种常见的做法。我试图找到一些有关它的资料,但是我找不到
我了解,这可能是最佳做法,所以我很想了解。有人可以向我解释为什么它很重要,我从中得到什么好处,我应该如何去做呢?指向一些解释该问题的文章的链接将不胜感激。
PS我知道我需要特殊的测试环境(虚拟内存数据库,模拟的网络层等),但是直到现在,我仍设法在没有单独的测试主机的情况下实现它。但我相信可能会有更好的方法。
我曾经问过一个与XCTests有关的问题.在其中一个答案中,我被告知在运行单元测试时(至少在iOS开发中)使用单独的测试主机(主应用程序除外)是一种常见做法.我试图找到一些关于它的消息来源,但我不能
我明白,这可能是一种最佳实践,所以我真的很想理解它.有人可以向我解释为什么它很重要,我从中获得了什么好处,我该怎么做呢?将非常感谢与解释该问题的一些文章的链接.
PS我明白我需要特殊的测试环境(伪内存数据库,模拟网络层等),但到目前为止我设法实现它没有单独的测试主机,只使用我的主应用程序,如Xcode建议默认情况下.但我相信可能有更好的方法.而且我知道Xcode建议的默认值并不总是那么好.