【问题标题】:iPhone Xcode Is there a way to test methods without loading up the simulator?iPhone Xcode 有没有办法在不加载模拟器的情况下测试方法?
【发布时间】:2010-07-25 04:53:16
【问题描述】:

我正在尝试测试我的 iPhone 项目所需的一些简单的字符串操作方法。我想知道是否有没有每次都加载模拟器的情况下测试方法的结果..

例如在我的 main.m 方法中:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
        testMethod();
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}


void testMethod() {
    NSString *body = @"{\"username\":\"name\",\"password\":\"123\"}";
    NSLog(@"body=%@",body);
}

我要做的就是运行此代码并查看控制台输出的内容(无需模拟器)。这在 xCode 中可能吗?

【问题讨论】:

  • P.S.我知道它仍然可以用模拟器完成,但是有一个更快的方法会很好:)
  • 您的意思是“快速执行小sn-ps代码并检查它们所取得的成果”的意义上的测试还是执行单元测试的意义上的测试?
  • 在“快速执行小sn-ps代码”的意义上

标签: iphone xcode testing


【解决方案1】:

这对于Unit Testing 来说是一个完美的情况。对于 iPhone 开发,我一直在使用 GH-Unit

设置 GH-Unit 和学习如何编写适当的单元测试会产生一些开销,但回报将是:

  1. 您将能够快速编写和测试您的方法,并确信它可以正常工作。
  2. 测试将永久存在,因此您可以重构测试方法并确保不会破坏任何内容。

我从未听过任何人谈论单元测试的最大好处是它可以让您以多快的速度修复错误。当您或测试人员在您的应用程序中发现错误时,您可以快速编写单元测试来重现导致错误的情况,重新编写代码来处理错误,然后运行测试,所有这些都无需编译和运行您的应用程序.对于深埋在导航层次结构中的错误,这是一个巨大的胜利。

我刚刚记得的另一个好处是,良好的单元测试可以让您在编写大量依赖于特定接口的代码之前,在练习模式下逐步使用您的类/方法。这是找出那些看起来是个好主意的笨拙的小工作流程的好方法,直到您必须真正开始使用它们。

还有一个好处:自我记录。如果您需要向某人提供有关如何使用您的类的示例代码,只需从单元测试中复制并粘贴代码即可。

我不做测试驱动开发,我也不是 100% 的覆盖率,但正如你可能从这篇文章中看出的那样,我喜欢一些单元测试。我曾经跳过各种尴尬的圈子,设置基于终端的小项目,让我测试我的课程,而无需运行整个应用程序的开销。过了一会儿,我意识到这一切是多么愚蠢,并全神贯注地学习如何测试我的课程。这极大地提高了我的工作效率。


@jlehr 建议使用 OCUnit,它确实与 Xcode 有更好的集成,并且更容易设置。不过,我会远离 iPhone 上的 OCUnit。在使用 OCUnit 的模拟器中,我在调试器中运行单元测试时遇到了很多问题。如果您可以先尝试编写完美的单元测试,也许这不是问题:-D GHUnit 让您开箱即用地调试单元测试。

不过,这仅适用于 iPhone 开发人员。如果您使用的是 OS X,那么 OCUnit 是您进行单元测试的绝佳选择。还有很多其他测试框架,但 GHUnit 是我尝试使用的唯一一个非常适合 iPhone 开发的框架。

【讨论】:

  • OP 可能还想看看 OCUnit,因为它与 Xcode 集成得相当好,所以最初可能更容易配置。
【解决方案2】:

不是真的,不。如果你真的想要,你可以创建一个新的 Xcode 项目作为一个“命令行实用程序”(在 Mac OS X 模板下),它运行得更快,因为它不需要加载模拟器。如果你只是在做 NSString 操作,同样的代码也可以在 Mac OS X 上运行。

【讨论】:

  • +1。只需创建一个单独的命令行实用程序即可快速测试非 UI 代码。
  • 太棒了。我会看看这个和单元测试。谢谢大家。
  • @Alex 创建命令行实用程序对于一两个类来说很好,但它很快就会失控。从长远来看,花时间开发单元测试是有回报的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
相关资源
最近更新 更多