问题标签 [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.
ios - OCMockito 使用任何参数进行验证
我正在尝试验证模拟对象上的函数根本没有使用任何参数调用。
我正在模拟的对象的功能是......
如果用户名为空,我想验证该函数是否未被调用。
IE
我只是不确定在......位中放什么?
objective-c - 使用 dispatch_async 调用测试代码
在 TDD 之后,我正在开发一个 iPad 应用程序,该应用程序从 Internet 下载一些信息并将其显示在列表中,允许用户使用搜索栏过滤该列表。
我想测试一下,当用户在搜索栏中键入时,带有过滤器文本的内部变量会更新,过滤后的项目列表也会更新,最后表格视图会收到“reloadData”消息。
这些是我的测试:
注意:更改“filterText”属性现在会触发实际的过滤过程,该过程已在其他测试中进行了测试。
这可以正常工作,因为我的 searchBar 委托代码编写如下:
问题是过滤这些数据正在成为一个繁重的过程,目前正在主线程上完成,因此在此期间 UI 被阻塞。
因此,我想到了做这样的事情:
这样过滤过程发生在不同的线程中,当它完成时,表被要求重新加载它的数据。
问题是......我如何在 dispatch_async 调用中测试这些东西?
除了基于时间的解决方案之外,还有其他优雅的方法吗?(比如等待一段时间并期望这些任务已经完成,不是很确定)
或者也许我应该把我的代码放在不同的方式上,让它更容易测试?
如果您需要知道,我正在使用Jon Reid的OCMockito和OCHamcrest。
提前致谢!!
objective-c - 是否有一种惯用的 Objective-C 技术可以使 init 方法返回一个存根实现以进行测试?
我正在为一个Foo
具有协作者的类编写单元测试Bar
。我想使用Bar
inFoo
的测试的手动构建存根实现。
如果我在 Java 中这样做,我会给Foo
一个BarFactory
合作者并注入一个MockBarFactory
inFoo
的测试,它总是返回我的StubBar
.
我知道这种技术在 Objective-C 中可以很好地工作,但它并没有让我觉得在动态语言中做特别惯用的事情。我想知道我是否可以在运行单元测试时做任何会导致[[Bar alloc] init]
返回StubBar
但Bar
在“现实生活”中正常实现的事情。
还是在这种情况下最适合使用明显的工厂模式?
ios - 处理 UITableView 的 indexPathsForSelectedRows
我不确定如何实现我的模拟UITableView
对象正确回答indexPathsForSelectedRows
. 在我的应用程序中,用户可以(处于编辑状态)选择表格视图中的单元格,该单元格代表给定目录的文件/文件夹。一旦用户选择了一个文件夹项目,之前选择的文件项目应该被取消选择。我的测试(使用 OCHamcrest/OCMockito)看起来像这样。
问题是我可以验证文件项是否被选中,但我不能向 mockTableView 询问其选定的行。有人可以告诉我如何处理吗?tableView:selectRowAtIndexPath:animated:scrollPosition:
当 tableView 被要求提供该信息时,我是否必须自己记录电话并提供正确答案?
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
?
java - 尝试使用 TestNG 测试 java 应用程序的异常
我正在使用 maven-java-spring 和 testNG,在测试流视图之前一切似乎都很好。我正在尝试解决这个异常,我正在寻找,并且我找到了不同版本的东西,但我没有'不相信这个答案,让我展示一下例外情况:
如果有人需要更多信息,我会很着迷地展示它(信息):)
我有更多信息
在测试类中失败的方法是:@Test
并抛出:
我想“上下文”是空的?但我不明白。。
/** 每个执行的上下文 */
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 的内容
unit-testing - 模拟 KVO 观察者时 OCMockito 崩溃
我正在尝试模拟传递给我的 SUT 的对象。传递时,SUT 将模拟注册为某些属性的观察者。在 SUT dealloc 中,它调用removeObserver
模拟。这在 OCMockito 0.23 上工作得很好,但是当更新到 1.0.0 时,这个测试会使 OCMockito 陷入[HCIsEqual .cxx_destruct]
. 稍微调试一下,引导我到MKTInvocationContainer
方法:
其中调用被告知保留其参数。可能是一个保留周期?
此外,我一直在做一些研究,我发现了几个 SO 答案说明NSProxy
和 KVO 之间的不兼容:
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 中的哪些变化导致现在失败?
无论如何,很抱歉给您带来麻烦,非常感谢您。
ios - 在单元测试中断言 UIImage 的最佳方法是什么?
假设我正在为tableView:cellForRowAtIndexPath:
视图控制器上的委托方法编写单元测试。根据我传入的索引路径,此方法可能会返回几个不同的单元格配置。
我可以很容易地断言该cell.textLabel.text
属性。但是我如何断言该cell.imageView.image
属性包含正确的图像?图像或 imageView 都没有(公共 API)属性,我可以使用它来找出图像名称或文件名。
我想出的最好的方法是创建最小的有效 .png(使用[UIImage imageWithData:]
这样我就不会在单元测试中接触磁盘)并断言我得到的字节数组cell.imageView.image
是我期望的。我创建了一个OCHamcrest 匹配器来使它更好一点,但这是一种不令人满意且不灵活的方法。
有没有人有更好的主意?
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 等价物,所以我暂时将其保留为未回答。