繁体   English   中英

使用OCMock进行OSX应用程序测试

[英]OSX application testing with OCMock

我从http://pathfindersoftware.com/2009/01/testing-delegate-ocmock/开始使用OSX TDD和OCMock。

现在,我处于应用程序启动时显示登录名的阶段,并希望测试具有无效/无凭据的用户是否可以登录。

详细地,AppDelegate将自身设置为登录视图控制器的委托,尝试登录(不设置凭据),然后调用委托方法didNotAuthorizeUser 但是我在测试中遇到错误。 详情请见下文。

对象设置

  • AppDelegate-真实对象,实例化登录vc并符合其协议( SomeDelegateProtocol
  • LoginVC-模拟
  • 应用-模拟

测试

id mocklvc = [OCMockObject mockForClass:[LoginViewController class]];

[appDelegate setLoginViewController:mocklvc];

id qtApp = [OCMockObject mockForClass:[NSApplication class]];

id loginDelegate = [OCMockObject mockForProtocol:@protocol(SomeDelegate)];

[[mocklvc expect] setLoginDelegate:loginDelegate]; 
[[mocklvc expect] authenticateWithService];
[[loginDelegate expect] didNotAuthorizeUser];


//This row returns NSInternalConsistencyException
//OCMockObject[LoginViewController]
//unexpected method invoked setLoginDelegate:<AppDelegate>
[appDelegate applicationDidFinishLaunching:qtApp]; 

[mocklvc verify];

AppDelegate.m

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{        
    [self.loginViewController setLoginDelegate:self];
}

LoginViewController.h / .m

@property(weak)id <SomeDelegate> loginDelegate;

错误信息

调用应用程序didFinishLaunchingWithOptions时:在测试中出现以下错误,

NSInternalConsistencyException OCMockObject[LoginViewController] unexpected method invoked setLoginDelegate:<AppDelegate>

您认为这首先是一个很好的设置吗? 关于如何重写测试或如何解决错误的任何想法?

交易所loginDelegateappDelegate解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM