首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在OCMock中存根一个类方法?

在OCMock中存根一个类方法,可以使用以下步骤:

  1. 导入OCMock框架:
代码语言:txt
复制
#import <OCMock/OCMock.h>
  1. 创建一个id类型的mock对象,用于模拟要存根的类:
代码语言:txt
复制
id mockClass = OCMClassMock([ClassName class]);

其中,ClassName是要存根的类的名称。

  1. 使用OCMStub方法存根类方法:
代码语言:txt
复制
OCMStub([mockClass methodName]).andReturn(returnValue);

其中,methodName是要存根的类方法的名称,returnValue是存根方法的返回值。

  1. 调用存根的类方法:
代码语言:txt
复制
[ClassName methodName];

完整的示例代码如下:

代码语言:txt
复制
- (void)testMockClassMethod {
    // 创建一个id类型的mock对象,用于模拟要存根的类
    id mockClass = OCMClassMock([ClassName class]);

    // 存根类方法
    OCMStub([mockClass methodName]).andReturn(returnValue);

    // 调用存根的类方法
    [ClassName methodName];

    // 验证方法是否被调用
    OCMVerify([mockClass methodName]);
}

在这个示例中,我们使用OCMClassMock方法创建了一个模拟ClassName类的mock对象,并使用OCMStub方法存根了methodName类方法,该方法的返回值为returnValue。然后,我们调用了存根的类方法,并使用OCMVerify方法验证了该方法是否被调用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS_单元测试三之OCMock使用

Mock可以在给定存根方法 10.2、期望Stub方法无效 10.3、不能为某些特殊创建部分模拟 10.4、某些方法无法存根或验证 10.5、NSString和NSArray上的方法无法存根或验证...10.6、NSManagedObject的方法及其子类无法存根或验证 10.7、无法验证 NSObject 上的方法 10.8、无法验证核心 Apple 的私有方法 10.9、运行后验证不能使用延迟...9.2、重新验证失败后快速抛出异常 Re-throwing fail fast exceptions in verify all 在快速失败模式下,异常可能不会导致测试失败(:当方法的调用堆栈未在测试结束时...,则存根方法将持续存在,即使在测试也是如此。...具体来说,在以 NS 或 UI 作为前缀的,所有带有下划线前缀和/或后缀的方法。 在某些情况下,可以对方法进行存根,然后对其进行验证。

3.2K20

何在 Python 创建静态数据和静态方法

Python包括静态数据和静态方法的概念。 静态数据 在这里,为静态数据定义一个类属性。...def getcount(self): return Demo.count 我们也可以返回以下内容,而不是返回 Demo.count - return self.count 在 demo 方法,像...self.count = 42 这样的赋值会在 self 自己的字典创建一个名为 count 的新且不相关的实例。...静态数据名称的重新绑定必须始终指定,无论是否在方法 - Demo.count = 314 静态方法 让我们看看静态方法是如何工作的。静态方法绑定到,而不是的对象。...statis 方法用于创建实用程序函数。 静态方法无法访问或修改状态。静态方法不知道状态。这些方法用于通过获取一些参数来执行一些实用程序任务。

3.5K20
  • 何在phpunitmock一个单例

    Mock简介 当我们对A进行单元测试时,A可能依赖了B,为了减少依赖,方便A方法的测试,我们可以模拟一个B,简单规定其各方法的返回值(而非真正实现具体逻辑)。...$this->assertEquals('foo', $stub->doSomething()); } } 在这个例子,我们得到了一个'SomeClass'的模拟,规定其可以被调用任意次,如果调用...doSomething方法,将得到值foo。...问题: 我们知道,对于一个单例,其constructor方法为private,而getMock的实现,默认是要调用原的constructor方法。...disableOriginalConstructor()->getMock(); 附: 对getMock的6个可选参数的详解,参见:http://www.phpunit.de/manual/3.6/en/test-doubles.html 手册并未提及它们的默认值

    1.7K30

    何在phpunitmock(模拟)一个单例

    Mock简介 当我们对A进行单元测试时,A可能依赖了B,为了减少依赖,方便A方法的测试,我们可以模拟一个B,简单规定其各方法的返回值(而非真正实现具体逻辑)。...$this->assertEquals('foo', $stub->doSomething()); } } 在这个例子,我们得到了一个'SomeClass'的模拟,规定其可以被调用任意次,如果调用...doSomething方法,将得到值foo。...问题: 我们知道,对于一个单例,其constructor方法为private,而getMock的实现,默认是要调用原的constructor方法。...disableOriginalConstructor()->getMock(); 附: 对getMock的6个可选参数的详解,参见:http://www.phpunit.de/manual/3.6/en/test-doubles.html 手册并未提及它们的默认值

    3.1K10

    PICK一下,iOS自动化测试新方案出道

    ,获取需要的实例对象 调用获取的实例方法,做用例需要做的事 断言 NTElement说明:如何在内存中找到需要的实例对象呢?...4.2.2 创建并初始化 还有些时候我们需要自己创建并初始化一个来测试代码的一些功能,比如在测试下载功能的时候会用到"MaterialManager"这个,但是这个在我们的测试工程NextTest...并没有实现,只在微视的工程实现了,但我们想创建它并对这个方法进行测试,那该怎么办呢? ...其中“NSClassFromString”方法是封装好的可以根据字符串获取原工程对应方法,在编写用例时可以直接使用。 ...除此之外,我们还封装了一些方法MJFrontVc()能够直接看到当前VC: ? MJChoose()方法可以直接获取我们某个VC或者某个View的地址,返回是一个数组 ?

    2.3K61

    OCMock 源码分析

    对于 Objective-C 来说可能就得借助 OCMock 这种组件来伪造隐藏在代码细节的测试条件。...核心处理 Mock Class OCMock 功能很多,不过基本上都是依赖于拦截方法做到的,既然要做到这一点就必然需要一个切面,下面看一个常用的宏: OCMClassMock(TestObj.self)...OCClassMockObject的一个方法实现,即forwardInvocationForClassObject:,如此,TestObj调用方法触发消息转发时都会走到这个新方法,组件就成功拿到一个切面...不支持的方法 由于 OCMock 本身就是基于系统相关、消息重定向与转发相关方法做的,所以肯定是得避免使用者去 Mock 这些方法,所以我们得大致清楚限制,避免编写单测时出现始料未及的情况。...我们知道被 KVO 的对象的会被重写-class方法,返回实际一个

    72551

    CocoaPods 使用手册:1、基础 2、高级用法: podspec.json、tweak集成AsyncSocket、 静态库

    2、某个库用到其他库时,可避免手动管理这些依赖关系 语法 platform :ios, '9.0' inhibit_all_warnings!...---- 注意,Podfile文件应该和你的工程文件.xcodeproj在同一个目录下。...这里写图片描述 在终端的当前项目目录下,运行以下命令: $ pod install 1.1.3 安装第三方库之后,打开项目文件的方式 ---- [!]...1.2 场景2:如何正确编译运行一个包含CocoPods库的项目 ---- 在GitHub上找到一份代码符合自己想需求,你再仔细一看,会发现你下载的代码包含了Podfile。...会更新所有的库,获取最新版本的库。而且你会发现,如果用了 pod update,再用 $ pod install 就成功了。

    3K20

    一个简单的方法:截取子类名称不包含基后缀的部分

    在代码,我们可能会为了能够一眼看清之间的继承(从属)关系而在子类名称后缀带上基的名称。但是由于这种情况下的基不参与实际的业务,所以对外(文件/网络)的名称通常不需要带上这个后缀。...本文提供一个简单的方法,让子类的后缀删掉,只取得前面的那部分。 在这段代码,我们至少需要获得两个传入的参数,一个是基的名称,一个是子类的名称。...另外,我们还需要有一些约束,必须有一个类型是另外一个类型的子类。于是我们可能必须来使用泛型做这样的约束。...于是,我们可以写出下面的方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32...33 using System; namespace Walterlv.Utils { /// /// 包含名相关的处理方法

    22430

    在C++反射调用.NET(一) 反射调用第一个.NET方法

    注意,本文说的C++反射调用,不是对C++自身进行封装的反射功能,而是在C++/CLI代码反射调用.NET代码,原理上跟你在.NET应用反射调用另外一个.NET的程序集一个道理。...我们先在NetLib项目写一个简单的.NET ,这个方法内部没有复杂的业务逻辑代码,仅仅用来供反射调用测试: namespace NetLib { public class User...在C++的成员用 -> 符号调用,命名空间或者的静态成员,用::调用,例如上面的构造函数的代码: Assembly^ ass = Assembly::LoadFrom(this->assemblyFile...在C++/CLI中使用反射 反射调用第一个.NET方法 下面的方法,将会反射调用 User一个最简单的方法 : public int GetUserID(string IdString){} 该方法只有一个一个参数和一个简单的返回值...有了这2个简单的方法,我们来看看如何调用这个.NET方法“代理”: NetLibProxy::UserProxy^ proxy = gcnew NetLibProxy::UserProxy("

    3.2K100

    单元测试 - Tests和UITests (一) 业务测试

    单测意义从你实际使用总结一下。”...在实际使用已经经过验证的代码是没必要再走单测的,比如你写了一个新的功能,然后用到了以前封装的方法,这方法就没必要再验证一次。这里的意思是别做重复的工作!...)] OCMock不带 Hamcrest 框架,所以如果想要使用的话,需要自己安装Hamcrest . 5 方法的Mock 5.1 置换方法 id classMock...,但是一个方法同名的实例方法,置换方法的时候,必须使用ClassMethod() 5.4 恢复 id classMock = OCMClassMock([SomeClass...其他方法并不会收到影响,仍然会调用原来的的方法的实现. 10 使用限制 10.1 在一个指定的上,只能有一个mock对象 // don't do this id mock1

    99320

    iOS 逻辑自动化测试实践

    在本文中,以iOS手机管家为例子,逻辑自动化测试的范围选定为ObjectController文件夹,此文件夹文件均为与UI无关的业务逻辑。...实现思想就是根据要mock的对象的class来创建一个对应的对象,并且设置好该对象的属性和调用预定方法后的动作(例如返回一个值,执行其他方法,设置参数的返回值和返回异常等等),然后将其记录到一个数组...,接下来开发者主动调用该方法,最后做一个verify(验证),从而判断该方法是否被调用,或者调用过程是否抛出异常等。...在iOS手机管家的逻辑接口测试中选用通用的开源OCMock,配置和OCMock的使用参看如下连接文档:http://ocmock.org/ a、mock返回一个值; 举例:在iOS手机管家的加密相册功能...Ps:如下,通过调用stopMocking可以返回真实的状态,如果在测试结束前需要保存一个实际情况的数据这个方法是比较合适使用的。StopMocking后mock的方法就不能再继续使用了。

    3.1K10

    React.js 实战之 State & 生命周期将函数转换为一个添加局部状态将生命周期方法添加到

    生命周期图解 参考该例 目前,我们只学习了一种方法来更新UI 我们调用 ReactDOM.render() 来改变输出 在本节,我学习如何使Clock组件真正可重用和封装 它将设置自己的计时器...将函数组件 Clock 转换为 创建一个名称扩展为 React.Component 的ES6 创建一个render()空方法 将函数体移动到 render() 在 render() ,使用...this.props 替换 props 删除剩余的空函数声明 Clock 现在被定义为一个而不只是一个函数 使用就允许我们使用其它特性,例如局部状态、生命周期钩子 为一个添加局部状态...三步将 date 从属性移动到状态 在render()中使用this.state.date 替代 this.props.date 添加一个构造函数来初始化状态 this.state...结果如下 接下来,我们将使Clock设置自己的计时器并每秒更新一次 将生命周期方法添加到 在具有许多组件的应用程序,在销毁时释放组件所占用的资源非常重要 每当Clock组件第一次加载到

    2.2K40

    dubbo学习之本地存根实践

    故本地存根机制类似与AOP机制的around advice(环绕增强); 则本地存根执行顺序: 1.服务消费者发起调用; 2.如果服务消费者端存在本地存根 Stub 的话,会先执行本地存根;...给大家贴一下源码ServiceConfig#checkAndUpdateSubConfigs()。...如果实现不以Stub结束,那反射查找本地存根实现便找不到,又谈何实现本地存根的逻辑呢~ ? 踩坑点相信大家已经清楚,下面开始进入实战环节。...UserService 简单定义一个方法 /** * @author wx * @date 2020/9/6 11:39 下午 * 测试本地存根服务接口 */ public interface...到此为止,本地存根实践应用结束,大家对源码如何实现原理,可以借助此demo开始debug吧~ 溪源初次接触dubbo本地存根机制,文中存在错误之处,希望大家及时指正!

    97631
    领券