【发布时间】:2014-03-13 16:06:57
【问题描述】:
我正在尝试为使用 Parse 后端框架的 iOS 应用程序编写单元测试,经过大量实验后,似乎无法编写成功的单元测试。我发现了一些关于测试异步代码 (Testing asynchronous call in unit test in iOS) 和测试网络调用的帖子,但是我还没有找到一种方法来测试对 Parse 后端的异步回调调用。
举个例子,谁能告诉我如何测试以下代码行:
[PFUser saveUser:userModelMock withBlock:^(BOOL success, NSError *error) {
}];
我正在使用 OCMock 和 XCTest 框架。
任何帮助将不胜感激。
* 编辑 * 这是我目前所拥有的,但似乎失败了
- (void)testSaveUser {
id userModelMock = [OCMockObject niceMockForClass:[UserModel class]];
id userControllerMock = [OCMockObject niceMockForClass:[self.userController class]];
[[userModelMock expect] saveInBackgroundWithBlock:[OCMArg any]];
[[userControllerMock stub] saveUser:userModelMock withBlock:[OCMArg any]];
[userModelMock verify];
}
【问题讨论】:
-
您要测试什么? PFUser 希望有自己的单元测试,所以你的测试应该依赖它像宣传的那样运行,你可以简单地模拟对 saveUser:withBlock: 的调用。如果您想测试您的异步回调是否按预期工作,这个答案可能会有所帮助:stackoverflow.com/a/20694495/449161
-
同意,我想 Parse 有内部测试 - 但是我将 PFUser 子类化并创建了一个控制器来处理所有数据交互。在控制器中我有一个调用 saveUser 的方法,所以在测试中我需要验证 saveUser: 在我调用包装它的方法时被调用。
-
如果您正在测试控制器从另一个方法调用此方法,只需对 PFUser 对象使用模拟和
expects并从您的测试中调用控制器方法。如果调用是异步的,请遵循您链接的帖子中的模型。还是我错过了什么? -
这正是我正在做的。但是我不想调用 parse 方法,我只想知道它会被调用。我是单元测试的新手,并且仍在学习曲线中工作。我将编辑帖子并坚持我已经拥有的内容。
标签: ios unit-testing parse-platform ocmock xctest