如何使用OCMock来模拟一个C函数
如何使用Ocmock模拟自定义C-LIB函数?在Google上找不到任何东西,任何方法都无法使用Ocmock的任何方法 解决方案 一种解决方案可以是将功能封装在静态类中并模拟它.通过这种方式,您可以测试功能本身并嘲笑他的用法(使用静态类). 其他解决方案 您无法用Ocmock模拟C功能.您将需要使用另一个框架.
12 2024-04-09
编程技术问答社区
使用OCMock,以代码块为参数的存根方法
有没有一种方法来解决方法,可以将其作为参数作为障碍?例如mehod: - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler; 解决方案 是.最简单的方法是接受任何东西: id mockGeocoder = [OCMockObject mockForClass:[CLGeocoder class]]; [[mockGeocoder stub] reverseGeocodeLocation:[OCMOCK_ANY] completionHandler:[OCMOCK_ANY]]; 如果要验证特定的块,它会变得更棘手.一种选项是使您的完成处理程序成为一类的属性,在初始化课程时初始化它,并将测试直接匹配: // in your class @property(copy)CLGeocodeC
8 2024-04-01
编程技术问答社区
如何部分地模拟外部对象
我有类方法可以使用依赖对象(键对象) 测试 apirouter.m + (NSURL*)apiURLWithPath:(NSString*)path { MyKeys *keys = [MyKeys new]; NSString *url = [NSString stringWithFormat:@"%@?api_key=%@", path, [keys APIKey]]; return [NSURL URLWithString:url]; } 我正在尝试部分模拟此键对象并返回" my_api_key"值,但是测试方法失败并返回真实API键(例如AS78D687AS6D7DAS8DA). apirouterpec.m describe(@"APIRouter", ^{ it(@"should return url for api", ^{ Keys *keys = [Keys new]; id ke
14 2024-03-29
编程技术问答社区
如何让ARC下的OCMock停止使用弱属性对NSProxy子类集进行计费?
在ARC下,我有一个对象,Child具有weak属性,parent.我正在尝试为Child编写一些测试,并且我正在使用OCMock嘲笑其parent属性. 在ARC下,使用合成的弱属性设置器设置NSProxy子类未设置属性...设置了弱属性后的行,检查它已显示它已经nil.这是具体示例: @interface Child : NSObject @property (nonatomic, weak) id parent; @end @implementation Child @synthesize parent = parent_; @end // ... later, inside a test class ... - (void)testParentExists { // `mockForProtocol` returns an `NSProxy` subclass // OCMockObject *aPar
12 2024-03-21
编程技术问答社区
如何对AFNetworking请求进行单元测试
我正在提出GET请求以AFNetworking检索AFNetworking的请求,如下所示: NSURL *url = [NSURL URLWithString:K_THINKERBELL_SERVER_URL]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; Account *ac = [[Account alloc]init]; NSMutableURLRequest *request = [httpClient requestWithMethod:@"GET" path:[NSString stringWithFormat:@"/user/%@/event/%@",ac.uid,eventID] parameters:nil]; AFHTTPRequestOperation *operation = [httpClient HTT
20 2024-01-19
编程技术问答社区
在iOS单元测试中模拟NSHTTPURLRequest和NSHTTPURLResponse
我正在开发iOS中的框架,该框架对服务器进行HTTP调用.我想编写单元测试以测试API.进行模拟服务器呼叫的单元测试.如何设置期望并返回手工构造的URL响应.? 解决方案 这是您可能如何模拟sendasynchronousrequest: NSDictionary *serverResponse = @{ @"response" : [[NSHTTPURLResponse alloc] initWithURL:nil statusCode:200 HTTPVersion:nil headerFields:@{}], @"data" : [@"SOMEDATA" dataUsingEncoding:NSUTF8StringEncoding] }; id connectionMock = [OCMockObject mockForClass:NS
10 2023-12-20
编程技术问答社区
调用[NSBundle mainBundle]时,XCTest失败。
我有一些代码在某个时候调用[NSBundle mainBundle],主要是为了读取/设置首选项.当我单位测试该方法时,测试会失败,因为测试的主角不包含文件. 这是不是错误: 他们的回答的要旨是Xctest通过返回自己的主捆绑而不是测试目标的捆绑包来正确工作. 以前,我们的代码库正在使用NSBundle> +mainBundle类方法上的类别覆盖.但是这很危险,因为在类别中覆盖现有方法是未定义的. 如果类别中声明的方法的名称与原始类中的方法或同一类中另一个类别(甚至超级类)中的方法相同,则该行为对于哪种方法实现不确定在运行时使用. 实际上Xcode警告您: 类别正在实现一种方法,该方法也将由其主要类实施 那么,解决该问题的正确方法是什么? 解决方案 解决此问题的最简单,最干净的方法是在您的单元测试中部分模拟NSBundle类,以返回[NSBundle bundleForClass:[self class]] [NSBundle bundl
14 2023-12-20
编程技术问答社区
单元测试 Parse框架iOS
我正在尝试为使用解析后端框架的iOS应用程序编写单元测试,并且在大量实验似乎未能编写成功的单元测试之后.我发现了一些有关测试异步代码的帖子(测试单位呼叫的单位呼叫在iOS )和测试网络调用中进行测试,但尚未找到使用异步回调对解析后端进行测试的方法. 举一个例子,任何人都可以建议我如何测试以下代码行: [PFUser saveUser:userModelMock withBlock:^(BOOL success, NSError *error) { }]; 我正在使用ocmock和xctest框架. 任何帮助都将不胜感激. *编辑 * 这是我到目前为止所拥有的,但似乎正在失败 - (void)testSaveUser { id userModelMock = [OCMockObject niceMockForClass:[UserModel class]]; id userControllerMock = [OCMockObject ni
18 2023-12-20
编程技术问答社区
测试目标X遇到了一个错误(早期意外退出,操作从未完成启动--将不会尝试重新启动
我已经开始使用OCMock为我在项目工作区中集成的现有项目编写测试用例.在遵循此 link .. 首次执行测试用例时,它会给上述错误.我搜索了它,并尝试了一些解决方案,例如创建新的目标,重新启动xcode ,但这对我没有帮助.有什么想法吗? 解决方案 我在这里有我的笔记和演示应用程序一个> 确保所有框架都链接到测试目标 配置Runpath Search Paths指向$(FRAMEWORK_SEARCH_PATHS) 更多信息 li> 其他解决方案 我正在使用迦太基,而我的问题是在测试目标中寻找依赖项.修复: 添加$(PROJECT_DIR)/Carthage/Build/iOS到Runpath Search Paths 您可以在此处找到参考:迦太基问题 其他解决方案 如果您使用的是Cocoapods,并且UI测试目标嵌入了应用程序目标中,则可能还有其他解决方案,不幸的是,这是默认模板中的情况(pod init). . 尝试将
26 2023-12-20
编程技术问答社区
在Xcode 5.0中不能使用OCMock 2.1+的存根类方法
我知道Ocmock版本2.1+ 支持开箱即用.但是由于某种原因,它不与我合作.为了确保我隔离了问题,我简单地克隆了示例 ocmock project (显然被标记为版本2.2 .1)并简单地将其添加在 id detailViewMock = [OCMockObject mockForClass:[DetailViewController class]]; [[[detailViewMock stub] andReturn:@"hello"] helloWorld]; in DetailViewController.h我添加了: + (NSString *)helloWorld; 和DetailViewController.m: + (NSString *)helloWorld { return @"hello world"; } ,但我继续遇到错误: *** -[NSProxy doesNotRecognize Selector:helloWor
18 2023-12-20
编程技术问答社区
OCMock 3.0.2链接器在.mm测试文件中出现错误
我正在使用Ocmock 3.0.2,我通过可可录为我的测试目标: platform :ios, '7.0' xcodeproj 'myProject.xcodeproj' target :myTestTarget do pod 'OCMock', '~> 3.0.2' end link_with "myTestTarget" 在我的测试文件(mytest.mm)中,我包括了ocmock,并想尝试新的验证策略,例如: - (void) test_myTest { MyObject *obj = [MyObject new]; id robotMock = OCMPartialMock(obj); [obj testMethod]; // some asserts OCMVerify([obj _internalMethodToBeCalled]); } 到目前为止似乎很正常.但是,当我尝试运行此特定测试用例时,我会收到
14 2023-12-19
编程技术问答社区
添加OCMock导致Test启动主程序而不是运行测试
我正在尝试将Ocmock添加到我现有的可可项目中,但是我遇到了一个奇怪的问题,我看不到其他人掩盖. 我最终将其隔离到以下内容:如果我只将ocmock.framework引用到我的项目(即以某种方式将其拖动到link binary build build阶段中),当我运行测试时,将启动真实的应用程序. 没有算力,输出是正常的: Test Suite 'Multiple Selected Tests' started at 2013-02-07 20:07:03 +0000 使用Ocmock Framework链接(部分输出): Error loading MyProjTests.octest/Contents/MacOS/MyProjTests Library not loaded: @rpath/OCMock.framework/Versions/A/OCMock Reason: image not found IDEBundleInjection.c: Erro
18 2023-12-19
编程技术问答社区
将原语传递到Ocmock的存根
我正在学习如何使用ocmock测试我的iPhone项目,并且我有这种情况:具有getHeightAtX:andY:方法的高度图类,以及使用HeightMap的渲染类.我正在尝试使用一些HeightMap模拟进行单位测试渲染.这有效: id mock = [OCMockObject mockForClass:[Chunk class]]; int h = 0; [[[mock stub] andReturnValue:OCMOCK_VALUE(h)] getHeightAtX:0 andY:0]; 当然,仅适用于x=0和y=0.我想使用"平坦"高度图测试.这意味着我需要做这样的事情: id chunk = [OCMockObject mockForClass:[Chunk class]]; int h = 0; [[[chunk stub] andReturnValue:OCMOCK_VALUE(h)] getHeightAtX:[OCMArg any] andY:[OCM
12 2023-12-18
编程技术问答社区
访问OCMock的andDo中的参数时,EXC\u BAD\u访问
我正在尝试使用Ocmock的Stub 和Do 方法编写代码块. 在这种情况下,正在测试UIImageView扩展类.我想检查扩展名调用 [self setImage:] ,带有非nil的参数(以后将使用其他图像比较). 使用Ocmock的和Do 方法时,该块完成后,测试崩溃了. id mockView = [OCMockObject mockForClass:[UIImageView class]]; [[[mockView stub] andDo:^(NSInvocation *invocation) { UIImage *img; [invocation getArgument:&img atIndex:2];
8 2023-12-18
编程技术问答社区
单元测试CLLocationManager的实现
我有一个名为" GeolocationManager"的类,可以处理CLLocationManager对象和delegate响应. - (void)getGeolocationForClient:(id)client { _delegate = client; _locationManager = [self createLocationManager]; _locationManager.delegate = self; _locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; [_locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(
16 2023-11-07
编程技术问答社区
OCMock通过任何CGSize
我正在使用ocmock,我正在尝试在我的一个测试中对这样的事情做: [[mockScrollView expect] setContentSize:[OCMArg any]]; 问题是[OCMArg any]返回id>类型,我想使用任何CGSize,因为我不知道它是确切的值.我该如何通过这个论点? 解决方案 使用Ocmock版本2.2版,您可以使用ignoringNonObjectArgs [[mockScrollView expect] ignoringNonObjectArgs] setContentSize:dummySize]; 其他解决方案 afaik无法使用Ocmock实现这一目标. 一种替代方法是创建手工模拟.这是UIScrollView的一个子类 另一个更容易的选择是使用真实的UIScrollView,直接检查是您期望的contentSize.我会选择这个解决方案. 其他解决方案 可悲的是,您似乎必须扩展Ocmock才能实现这
28 2023-11-07
编程技术问答社区
OCMock: 为什么我在试图调用UIWebView模拟时得到一个未识别的选择器异常?
编辑:这都是由我的其他链接标志设置中的错别字引起的.参见 我正在尝试模拟UIWebView,以便在测试iOS视图控制器的测试期间可以验证其上的方法.我使用的是由SVN修订版70(截至此问题的最新)构建的Ocmock静态库,以及Mac(GTM)单元测试框架的Google Toolbox,从SVN进行了修订410.当视图控制器尝试调用预期方法时,我会遇到以下错误. Test Case '-[FirstLookViewControllerTests testViewDidLoad]' started. 2010-11-11 07:32:02.272 Unit Test[38367:903] -[NSInvocation getArgumentAtIndexAsObject:]: unrecognized selector sent to instance 0x6869ea0 2010-11-11 07:32:02.277 Unit Test[38367:903] *** Termina
8 2023-11-07
编程技术问答社区
OCMock一个类方法,用自定义数据回调传递的块。
我确实有一个可以处理我所有网络通信的课程: typedef void (^ networkEndblock) (NSArray *, NSError *); @interface NetworkAPI : NetworkBase + (void) doSomeNetworkAcion:(networkEndblock) endBlock; @end 我使用上述代码(我不想在此处获取无关紧要的详细信息) - (void) runMyProcess:(SomeEndBlock)proccesEnded{ // Bussiness logic // Get Data from the web [NetworkAPI doSomeNetworkAcion:^(NSArray *resultArray, NSError *error){ // Check for error. if we have error then do error handli
16 2023-11-07
编程技术问答社区
Ocmock测试结构的地址
我有一些我想测试的代码,这些代码正在绕结构的地址传递: MyObject myObject = ...; MyRecord record = [someObject record]; //record is a @property [myObject add:&record]; 我已经模拟了someObject返回记录: MyRecord record = ...; [[[_mockSomeObject stub] andReturnValue:OCMOCK_VALUE(record)] record]; [[_mockMyObject expect] add:&record]; 不幸的是,Ocmock失败(我相信),因为将结构从NSValue包装器中拉出总是会返回其他地址. 如果参数之一是struct的地址,是否有一种方法可以使期望正确工作? ? 解决方案 看
30 2023-11-07
编程技术问答社区
OCMOCK-尽管期待
这是测试的代码: if ([MFMailComposeViewController canSendMail]) { MFMailComposeViewController *mailComposeController = [[MFMailComposeViewController alloc] init]; [mailComposeController setSubject:nil]; [mailComposeController setToRecipients:@[Text_Email_Me_Email]]; [mailComposeController setMailComposeDelegate:self]; [self.frontViewController presentViewController:mailComposeController
14 2023-11-07
编程技术问答社区