我有类方法来testing依赖对象(Keys对象) APIRouter.m + (NSURL*)apiURLWithPath:(NSString*)path { MyKeys *keys = [MyKeys new]; NSString *url = [NSString stringWithFormat:@"%@?api_key=%@", path, [keys APIKey]]; return [NSURL URLWithString:url]; } 我试图部分模拟这个Keys对象并返回“MY_API_KEY”值,但testing方法失败并返回真实的API密钥(例如as78d687as6d7das8da)。 APIRouterSpec.m describe(@"APIRouter", ^{ it(@"should return url for api", ^{ Keys *keys = [Keys new]; id keysPartialMock = OCMPartialMock(keys); OCMStub([keysPartialMock APIKey]).andReturn(@"MY_API_KEY"); NSURL *url = [APIRouter apiURLWithPath:@"http://www.api.com/v1/events"]; expect([url absoluteString]).to.equal([NSString stringWithFormat:@"http://www.api.com/v1/events?api_key=MY_API_KEY"]); }); });
我想validation一个预期的方法在unit testing中用Swift中的正确参数调用。 这在Objective-C中使用OCMock框架很容易完成。 您可以执行partialMocking和运行OCMExpect / Verify的组合来调用代码path,并调用正确的参数。 任何想法如何在Swift中做这样的事情?
我正在使用OCMock,我试图在我的一个testing中做到这样的事情: [[mockScrollView expect] setContentSize:[OCMArg any]]; 问题是[OCMArg any]返回一个idtypes,我想使用任何CGSize ,因为我不知道它的确切值。 我怎么能通过这个论点?
我是OCMock的新手 。 我使用dispatch_once()创build了一个单例类MyManager : @implementation MyManager + (id)sharedInstance { static MyManager *sharedMyManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedMyManager = [[self alloc] init]; }); return sharedMyManager; } 我在School课上有一个使用上述单例的方法: @implementation School … – (void) createLecture { MyManager *mgr = [MyManager sharedInstance]; [mgr checkLectures]; … } @end 现在,我想unit testing这个方法,我使用了MyManager的部分模拟: – (void) testCreateLecture { // create a […]
INtesting类 -(void)testMyTest { MasterViewController* masterVC = [[MasterViewController alloc]init];//[OCMockObject mockForClass:[MasterViewController class]]; id master = [OCMockObject mockForClass:[DetailViewController class]]; [[master expect] getStringVal:@"PARAM"]; [masterVC doSomething]; [master verify]; } 在detailViewController中 -(NSString*)getStringVal:(NSString*)param { NSString *returnParam = [NSString stringWithFormat:@"%@-String",param]; return returnParam; } 在主视图控制器 -(void)doSomething { DetailViewController *detail = [[DetailViewController alloc]init]; [detail getStringVal:@"PARAM"]; NSString * returnVal = [detail getStringVal:@"PARAM2"]; NSLog(@"returnVal %@",returnVal); NSLog(@"doSomething"); } […]
我正在用OCMock v3做unit testing,我想testing下面这段代码: @implementation School -(void) handleStudent:(Student*) student{ Bool result = [self checkIdentityWithName:student.name age:student.age]; … } … @end 在我的下面的testing案例中,我创build了名为“John”的student实例,年龄为23岁,然后运行testing的函数: -(void) testHandleStudent{ Student *student = [Student initWithName:@"John" age:23]; // function under test [schoolPartialMock handleStudent:student]; // I want to not only verify checkIdentityWithName:age: get called, // but also check the exact argument is passed in. that's John […]
我有一个应用程序,我推送一个UIAlertController与几个自定义的UIAlertAction 。 每个UIAlertAction在UIAlertAction的处理程序块中执行独特的任务actionWithTitle:style:handler: 我有几个方法,我需要validation在这些块内执行。 我怎样才能执行handler块,以便我可以validation这些方法执行?
我知道,OCMock版本2.1+ 支持开箱即用的类别方法。 但由于某种原因,它不适合我。 为了确保我将问题隔离开来,我简单地克隆了示例OCMock项目 (清楚地标记为版本2.2.1),并简单地将其添加到testMasterViewControllerDeletesItemsFromTableView中 : id detailViewMock = [OCMockObject mockForClass:[DetailViewController class]]; [[[detailViewMock stub] andReturn:@"hello"] helloWorld]; 在DetailViewController.h我补充说: + (NSString *)helloWorld; 和DetailViewController.m : + (NSString *)helloWorld { return @"hello world"; } 但是我一直在得到这个错误: *** -[NSProxy doesNotRecognize Selector:helloWorld] called! 看到这个问题的演示,请克隆这个回购看看是怎么回事。
有没有一种方法来存根方法,这是因为它的参数块? 例如mehod: – (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
有谁知道如何捕获发送到OCMock对象的参数? id mock = [OCMockObject mockForClass:someClass] NSObject* captureThisArgument; [[mock expect] foo:<captureThisArgument>] [mock foo:someThing] GHAssertEquals[captured, someThing, nil]; 我如何去validationfoo的论点? 我很乐意在模拟定义中的一个块中做到这一点,但是如果我能把对象拿出来,以便我可以在后面说明它的特性,这将是辉煌的。 这可能与OCMock?