问题标签 [ocmockito]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1518 浏览

ios - OCMockito 使用任何参数进行验证

我正在尝试验证模拟对象上的函数根本没有使用任何参数调用。

我正在模拟的对象的功能是......

如果用户名为空,我想验证该函数是否未被调用。

IE

我只是不确定在......位中放什么?

0 投票
2 回答
3169 浏览

objective-c - 使用 dispatch_async 调用测试代码

在 TDD 之后,我正在开发一个 iPad 应用程序,该应用程序从 Internet 下载一些信息并将其显示在列表中,允许用户使用搜索栏过滤该列表。

我想测试一下,当用户在搜索栏中键入时,带有过滤器文本的内部变量会更新,过滤后的项目列表也会更新,最后表格视图会收到“reloadData”消息。

这些是我的测试:

注意:更改“filterText”属性现在会触发实际的过滤过程,该过程已在其他测试中进行了测试。

这可以正常工作,因为我的 searchBar 委托代码编写如下:

问题是过滤这些数据正在成为一个繁重的过程,目前正在主线程上完成,因此在此期间 UI 被阻塞。

因此,我想到了做这样的事情:

这样过滤过程发生在不同的线程中,当它完成时,表被要求重新加载它的数据。

问题是......我如何在 dispatch_async 调用中测试这些东西?

除了基于时间的解决方案之外,还有其他优雅的方法吗?(比如等待一段时间并期望这些任务已经完成,不是很确定)

或者也许我应该把我的代码放在不同的方式上,让它更容易测试?

如果您需要知道,我正在使用Jon Reid的OCMockitoOCHamcrest

提前致谢!!

0 投票
2 回答
291 浏览

objective-c - 是否有一种惯用的 Objective-C 技术可以使 init 方法返回一个存根实现以进行测试?

我正在为一个Foo具有协作者的类编写单元测试Bar。我想使用BarinFoo的测试的手动构建存根实现。

如果我在 Java 中这样做,我会给Foo一个BarFactory合作者并注入一个MockBarFactoryinFoo的测试,它总是返回我的StubBar.

我知道这种技术在 Objective-C 中可以很好地工作,但它并没有让我觉得在动态语言中做特别惯用的事情。我想知道我是否可以在运行单元测试时做任何会导致[[Bar alloc] init]返回StubBarBar在“现实生活”中正常实现的事情。

还是在这种情况下最适合使用明显的工厂模式?

0 投票
1 回答
924 浏览

ios - 处理 UITableView 的 indexPathsForSelectedRows

我不确定如何实现我的模拟UITableView对象正确回答indexPathsForSelectedRows. 在我的应用程序中,用户可以(处于编辑状态)选择表格视图中的单元格,该单元格代表给定目录的文件/文件夹。一旦用户选择了一个文件夹项目,之前选择的文件项目应该被取消选择。我的测试(使用 OCHamcrest/OCMockito)看起来像这样。

问题是我可以验证文件项是否被选中,但我不能向 mockTableView 询问其选定的行。有人可以告诉我如何处理吗?tableView:selectRowAtIndexPath:animated:scrollPosition:当 tableView 被要求提供该信息时,我是否必须自己记录电话并提供正确答案?

0 投票
1 回答
650 浏览

ios - 如何使用 OCMockito 检查插入 UserDefault 的值

我正盯着使用OCMockito进行单元测试。现在我用它来模拟一个UserDefaults(通过依赖注入)。

我可以通过以下方式控制返回的内容: [given([mockUserDefaults objectForKey:@"some key"]) willReturn:@"a value I want"];

现在我的问题是:如何检查用户设置为 mock 的值UserDefaults

例如,如果用户发出: [self.userDefaults setObject:[NSDate date] forKey:"example"];

我如何date从模拟中获得背部userDefaults

0 投票
0 回答
241 浏览

java - 尝试使用 TestNG 测试 java 应用程序的异常

我正在使用 maven-java-spring 和 testNG,在测试流视图之前一切似乎都很好。我正在尝试解决这个异常,我正在寻找,并且我找到了不同版本的东西,但我没有'不相信这个答案,让我展示一下例外情况:

如果有人需要更多信息,我会很着迷地展示它(信息):)

我有更多信息

在测试类中失败的方法是:@Test

并抛出:

我想“上下文”是空的?但我不明白。。

/** 每个执行的上下文 */

0 投票
2 回答
810 浏览

ios - 关于使用 Cocoapods 设置 OCMockito 的问题

我在 Xcode 5 上使用 Cocoapods 设置 OCMockito(和 OCHamcrest)时遇到问题。这是我的 Podfile:

当我尝试遵循 iOS 项目设置 ( https://github.com/jonreid/OCMockito#adding-ocmockito-to-your-project ) 时,Xcode 找不到此导入:

所以我试着这样做:

它正在工作,但我不知道这是否很好。

另外,我还有一个问题。据我了解,我将 RestKit 和 OCMockito 链接到我的主要目标和测试目标。是否可以在两个目标上链接 RestKit 但仅将 OCMockito 链接到测试目标?

在此先感谢您的帮助。

更新:

这是 Cocoapods 的 Pods.xcconfig 基因:

似乎 IOS 标头设置不正确,那么 pod 是否错误?

更新:

这是 Pods/Headers/OCMockito 的内容

Pods/Headers/OCMockito

0 投票
1 回答
318 浏览

unit-testing - 模拟 KVO 观察者时 OCMockito 崩溃

我正在尝试模拟传递给我的 SUT 的对象。传递时,SUT 将模拟注册为某些属性的观察者。在 SUT dealloc 中,它调用removeObserver模拟。这在 OCMockito 0.23 上工作得很好,但是当更新到 1.0.0 时,这个测试会使 OCMockito 陷入[HCIsEqual .cxx_destruct]. 稍微调试一下,引导我到MKTInvocationContainer方法:

其中调用被告知保留其参数。可能是一个保留周期?

此外,我一直在做一些研究,我发现了几个 SO 答案说明NSProxy和 KVO 之间的不兼容:

NSProxy 和键值观察

https://stackoverflow.com/a/17457155/2824409

但是,我想知道为什么这适用于 OCMockito 0.23 而不是现在。任何想法?

在我的情况下,解决方案是用真实对象替换模拟。这很好用,但是为几乎不使用它的测试套件构建整个对象是很痛苦的。

无论如何,如果 Mock 不支持 KVO,我相信这应该记录在案并妥善处理。

[编辑]

我找到了解决这个问题的方法。

我们正在使用基于自定义块的 KVO 基础设施,类似于此处描述的:http: //www.mikeash.com/pyblog/key-value-observing-done-right.html。现在,SUT 正在为 KVO 注册模拟,并self在一个块内传递。我相信self它被保留在某个地方,但它不应该是,因为它在块之前被削弱了......

使用 Apple 提供的默认 kvo 框架似乎可以解决这个问题。但是,我仍然担心潜在的问题。OCMockito 中的哪些变化导致现在失败?

无论如何,很抱歉给您带来麻烦,非常感谢您。

0 投票
4 回答
4384 浏览

ios - 在单元测试中断言 UIImage 的最佳方法是什么?

假设我正在为tableView:cellForRowAtIndexPath:视图控制器上的委托方法编写单元测试。根据我传入的索引路径,此方法可能会返回几个不同的单元格配置。

我可以很容易地断言该cell.textLabel.text属性。但是我如何断言该cell.imageView.image属性包含正确的图像?图像或 imageView 都没有(公共 API)属性,我可以使用它来找出图像名称或文件名。

我想出的最好的方法是创建最小的有效 .png(使用[UIImage imageWithData:]这样我就不会在单元测试中接触磁盘)并断言我得到的字节数组cell.imageView.image是我期望的。我创建了一个OCHamcrest 匹配器来使它更好一点,但这是一种不令人满意且不灵活的方法。

有没有人有更好的主意?

0 投票
1 回答
938 浏览

objective-c - OCMockito - 带有“willReturn”的模拟类返回 nil 而不是我指定的值

我正在使用的代码如下所示:-

在你问之前,不,我不能直接调用我的“MyBowl”对象的方法,因为与这个问题无关的原因,它需要这样做。

所以,我想测试在上述方法中,[bowl getAnOrangeWithSize] 是用某些参数调用的。我想模拟 MyBowl 类,因为它不是这里测试的,只有上面的方法。我还希望 [bowl getAnOrangeWithSize] 调用返回一个模拟 MyOrange - 在这个例子中只是为了比较的目的,但可能我也可能在上面的方法中用那个“橙色”做东西&我想写测试那个也是。

为了测试这一点,我想注入一个依赖项(MyBowl 模拟),该依赖项又注入另一个模拟依赖项(MyOrange)。我已经多次遇到这个要求并进行了重构以解决它,但在这种情况下我被卡住了。

无论如何,我的测试是:-

测试失败,因为返回的Orange 为零。在代码中放置一个断点,我可以看到对“getAnOrangeWithSize”的调用返回 nil,因此它显然没有注意到我指定的给定/willReturn 指令。

我一直在搜索文档并在尝试各种想法时摸不着头脑,但没有运气。有没有办法让测试工作,或者这是 OCMockito 并不真正支持的东西(如果是这样,Kiwi 可以处理这个问题吗)?提前致谢。

编辑:似乎可以在 Kiwi 中执行此操作,如下所示:-

如果在 sut 的代码中调用了 mockOrange 中的方法,则可以将 mockOrange 设置为 nullMock 或为处理这些调用而创建的存根。

我对 Kiwi 很陌生,所以上述内容可能不是最佳的。我还没有找到如何创建一个只适用于传入的某些参数值的存根,以便您可以为(使用上面的示例)大小为 @"large" 返回一个 MyOrange 实例和 @ “发霉”返回另一个 - 但如果我找不到它是如何完成的,我想这是另一个问题的主题。

我仍然非常想知道上述 Kiwi 代码的 OCMockito/Hamcrest 等价物,所以我暂时将其保留为未回答。