【问题标题】:iPhone - Retrieving Resources for logical unit testsiPhone - 为逻辑单元测试检索资源
【发布时间】:2010-11-08 17:00:27
【问题描述】:

我一直在关注 Apple 关于为 iPhone 编写单元测试的文档,并且开箱即用,该例程似乎不起作用。我不确定我是否了解单元测试将在哪里获得对应用程序委托的引用。

我的依赖如下: My_Program_target -> UnitTesting_target -> UnitTests_bundle

下面的代码 sn-p 是断言失败的地方。我对 CPPUNIT 非常熟悉,但我无法理解它是如何跨越的。

- (void) testAppDelegate {

    id yourApplicationDelegate = [[UIApplication sharedApplication] delegate];
    STAssertNotNil(yourApplicationDelegate, @"UIAppliation failed to find the AppDelegate");

}

另外:

我已经决定在我的方法中进行逻辑测试。我正在尝试读取一个 XML 文件,但我没有运气解决该捆绑包,这将为我提供访问文件的路径。我尝试粘贴 allBundles 的路径输出,但该路径似乎也不起作用。下面是我在测试中执行的内容(你可以看到我用来输出包路径的调试语句):

NSLog(@"BundlePaths: %@", [NSBundle allBundles]);
   NSString * path = [[NSBundle bundleWithPath:@"$(TARGET_BUILD_DIR)"] pathForResource:@"SimpleTestList" ofType:@"plist"];
   STAssertNotNil(path, @"Bundle Location couldn't find the file specified");

基本上,路径上的断言不成功,但我不确定要为路径或目录放置什么来引用我告诉我复制包资源的 unitTest 包。调用 [NSBundle mainBundle] 也不起作用。

【问题讨论】:

标签: unit-testing xcode resources ocunit


【解决方案1】:

上述 Gary 答案的 Swift 3 翻译(使用 URL 而不是字符串路径)是:

let url = Bundle(for: type(of: self)).url(forResource: "SimpleTestList", withExtension: "plist")

注意关键和不明显的部分 type(of: self) 而不是 [self class]

【讨论】:

    【解决方案2】:

    好的,我想通了。为了在单元测试中打开文件,您需要指定要打开的文件:

    NSString * filePath = [[NSBundle bundleForClass:[self class] ] pathForResource:@"SimpleTestList" ofType:@"plist"];
    

    如果您将其包含在作为单元测试包的一部分编译的类中,该类将在单元测试包中查找文件 SimpleTestList.plist。

    对于单元测试,只需确保设置“复制捆绑资源”以将 plist 包含在单元测试捆绑中。

    【讨论】:

    • 这也是我的问题。感谢您发布此信息!
    • 没问题!很高兴它有帮助! =)
    • 另外,如果有人想知道,我也遇到了这个链接以及关于 managedObjectModels。类似的情况。 spacevatican.org/2009/9/10/unit-testing-core-data-iphone-apps
    • 我不得不像这样调整它:NSURL *modelURL = [[NSBundle bundleForClass:NSClassFromString(@"NSManagedObjectModel_AdditionsTests")] URLForResource:@"Tests" withExtension:@"momd"]
    【解决方案3】:

    如果您需要应用程序委托,您必须在设备本身而不是模拟器上运行单元测试。此外,您会看到单元测试输出出现在控制台中,而不是构建结果中。

    要知道的关键是有两种类型的单元测试 - 在可执行文件之外运行的逻辑测试,然后是需要完整运行环境的集成系统类型的测试。

    必须在选择模拟器作为目标的情况下运行逻辑测试,否则它们将不会运行。

    集成系统测试必须作为可执行文件的一部分在设备上运行 - 您需要一个新目标来完成此操作。

    抱歉,这一切都太复杂了,与许多其他单元测试框架相比,这方面的工作仍在进行中。

    【讨论】:

    • 嗯,那时我正在做的事情可能不需要应用程序委托。我目前想要完成的是测试我的模型。在最新的 devkit 版本中使用 OCUnit 之前,我在应用程序的派生类中完成了测试。我会实例化那个派生类,它会在运行和显示用户看到的视图之前在一个单独的线程中测试自己。我正在尝试将其纳入它所属的单元测试中。我现在的问题是我在获取 OCUnit 测试以查看 plist 文件时遇到问题,即使它在包中。
    • ...实际上是“在包中”,我的意思是我将它添加到包中的那个复制文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2012-02-05
    • 1970-01-01
    相关资源
    最近更新 更多