Tag: unit testing

视图控制器TDD

我正在尝试添加一些unit testing到我的项目来testing视图控制器。 但是,我似乎有看似简单的事情有问题。 我已经创build了一个我将参考的示例项目。 https://github.com/pangers/ViewControllerTesting 该示例包含一个UINavigationController作为初始视图控制器。 UINavigationController的根视图控制器是FirstViewController。 FirstViewController上有一个button,可以连接到SecondViewController。 在SecondViewController中有一个空的文本字段。 我试图添加的两个testing是: 1)检查FirstViewController中的button标题是“下一个屏幕”。 2)检查SecondViewController中的文本字段为空,“”。 我听说有关将swift文件添加到主目标和testing目标的报告不是很好的做法。 而是在你的公共testing中做任何你想要访问的东西,并把主要目标导入到testing中。 这就是我所做的。 (我也把主要目标的“定义模块”设置为YES,就像我在几篇文章中所读到的那样)。 在FirstViewControllerTests我已经实例化第一个视图控制器与以下内容: var viewController: FirstViewController! override func setUp() { let storyboard = UIStoryboard(name: "Main", bundle: NSBundle(forClass: self.dynamicType)) let navigationController = storyboard.instantiateInitialViewController() as UINavigationController viewController = navigationController.topViewController as FirstViewController viewController.viewDidLoad() } 我已经添加了testing: func testCheckButtonHasTextNextScreen() { XCTAssertEqual(viewController.button.currentTitle!, "Next Screen", "Button should say […]

iOS中的-NSRunLoop在XCTest中:如何获得一个运行循环在unit testing中工作?

好。 我环顾四周,没有find我的问题的确切答案。 我试图在unit testing(而不是主要运行)中testing超时处理程序。 这个问题似乎是[NSRunLoop mainRunLoop]没有在标准的运行中在unit testing中运行。 我以这种方式做超时: NSTimer *pTimeoutHandler = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(timeoutHandler:) userInfo:nil repeats:NO ]; [[NSRunLoop mainRunLoop] addTimer:pTimeoutHandler forMode:NSRunLoopCommonModes]; 这在标准运行中起作用。 这是设置超时的推荐方式。 但是,在testing运行中,这不起作用。 timeoutHandler:(NSTimer*)timer例程永远不会被调用。 看起来似乎有什么东西干扰了运行循环。 有没有办法让我的超时工作在运行和unit testing?

为什么我的对象的弱委托属性在我的unit testing中为零?

我为这个unit testing有一个非常简单的设置。 我有一个具有委托属性的类: @interface MyClass : NSObject … @property (nonatomic, weak) id<MyDelegateProtocol> connectionDelegate; … @end 我在testing中设置了委托: – (void)testMyMethod_WithDelegate { id delegate = mockDelegateHelper(); // uses OCMock to create a mock object [[delegate expect] someMethod]; myClassIvar.connectionDelegate = delegate; [myClass someOtherMethod]; STAssertNoThrow([delegate verify], @"should have called someMethod on delegate."); } 但是这个委托实际上并没有设置在我的unit testing的第3行,所以#someMethod永远不会被调用。 当我改变它 myClassIvar.connectionDelegate = delegate; STAssertNotNil(myClassIvar.connectionDelegate, […]

将XCTest导入到现有项目中

我添加了一个新的目标作为一个cocoa触摸unit testing包,命名为“MyAppTests”目录,而实际的框架是不活跃的 – 它突出显示为红色 当我在“构build阶段”选项卡技术中通过“链接二进制库”添加框架时,将添加一个新框架,而不是更新通过添加目标创build的框架。 当我运行代码时,我遇到了各种各样的麻烦,包括将错误链接到其他未被识别的框架。 如何激活在添加目标时生成的XCTest.framework? 请帮忙,谢谢!

你如何嘲笑iOS的OCMock的私人财产?

我有一个在我的类的.m文件中声明的私有属性被testing,我们称之为ClassUnderTest。 ClassUnderTest实例化ClassToBeMocked的一个实例。 我如何使用OCMock模拟出一个ClassToBeMocked的实例并将它分配给ClassUnderTest?

从Xcode项目中删除unit testing?

当我在Xcode 5中创build我的iOS项目时,单击选项可以将testing添加到项目中。 是否有可能删除所有testing的东西,就像我没有点击选项开始?

如何unit testing一个NSURLConnection委托?

我怎样才能unit testing我的NSURLConnection委托? 我做了一个ConnectionDelegate类,它符合不同的协议,以便将来自Web的数据提供给不同的ViewController。 在我太远之前,我想开始写我的unit testing。 但是我不知道如何testing他们作为一个单位没有互联网连接。 我也想我应该做什么来处理asynchronouscallback。

OCMock可以运行块参数吗?

假设一个方法签名,如下所示: – (void)theMethod:(void(^)(BOOL completed))completionBlock; 我想嘲笑这个方法签名,以确保该方法被调用,只是调用完成块。 我从其他职位看到这样的一个 ,我可以嘲笑方法调用,并接受任何块,但不运行该块。 我也知道有一个andDo方法可以使用,但我不知道如何传递一个块并运行它。 有任何想法吗? 谢谢。

在iOS中testingunit testing中的asynchronous调用

我在unit testingiOS中的asynchronous调用时遇到问题。 (虽然它在视图控制器中工作正常。) 有没有人遇到过这个问题? 我曾尝试使用等待function,但我仍然面临同样的问题。 请build议一个很好的方法来做到这一点的例子。

XCTAssertEqual用于Swift中的自定义对象

XCode 6,Beta 5 我有一个像这样的unit testing: func testMyObjectsEqual() { // …. XCTAssertEqual(myObject,myOtherObject,“\(myObject)和\(myOtherObject)应该等于”) } XCTAssertEqualObjects在Swift中不再可用,因为该语言在标量和对象之间没有区别。 所以我们必须使用导致以下错误的XCTAssertEqual: “typesMyObject不符合协议Equatable” 我发现唯一的解决方法是从NSObjectinheritance(MyObject),以便我可以执行以下操作: XCTAssert(myObject == myOtherObject,“\(myObject)和\(myOtherObject)应该是相等的”) 所以我的问题是: 有没有一种方法(从testing版5)使用XCTAssertEqual自定义types,而不必依靠NSObject或抛出所有自定义types与“==”重载?