Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS如何测试调用[[UIApplication sharedApplication]openUrl:someUrl]的方法_Ios_Objective C_Tdd - Fatal编程技术网

iOS如何测试调用[[UIApplication sharedApplication]openUrl:someUrl]的方法

iOS如何测试调用[[UIApplication sharedApplication]openUrl:someUrl]的方法,ios,objective-c,tdd,Ios,Objective C,Tdd,我想为下面的方法创建一个测试,我想检查忘记的密码是否正确。我是TDD的新手,我想知道你们是否认为这是必要的,我如何实施测试 - (IBAction)forgotPasswordButtonClicked:(id)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:kForgetPasswordURL]]; } 非常感谢您可以创建XCTest来测试以下方法 但是,您必须为您的项目创建一个测试目标,如果默

我想为下面的方法创建一个测试,我想检查忘记的密码是否正确。我是TDD的新手,我想知道你们是否认为这是必要的,我如何实施测试

- (IBAction)forgotPasswordButtonClicked:(id)sender {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:kForgetPasswordURL]];
}


非常感谢

您可以创建XCTest来测试以下方法

但是,您必须为您的项目创建一个测试目标,如果默认情况下没有创建XCTestCase,则必须在测试目标上创建一个XCTestCase,并创建一个以名称testForgotPassWordButtonClicked开头的方法


要运行测试目标,请为测试目标创建一个架构并对其运行测试。

我可以通过创建一个处理[[UIApplication sharedApplication]openURL:]的新类来做到这一点,我是通过在这个新类上添加一个静态方法来做到的。我仍然不确定这是否是一个好方法,但解决了我的问题。

我用静态方法删除了新类,为了解决我的问题,我使用了Specta框架中的部分模拟:
id mockApplication=[OCMockObject partialMockForObject:[UIApplication-sharedApplication]]


我想这是一个更好的解决方案。(我以前不知道部分模拟)

对于OCMock 3,请尝试以下操作:

id mockApplication = OCMClassMock([UIApplication class]);
OCMStub([mockApplication sharedApplication]).andReturn(mockApplication);

OCMVerify([mockApplication openURL:[OCMArg any]]);

这篇文章帮助了我。

我已经在这个项目上做TDD了,我正在使用Specta框架。但是我还不知道具体如何做这个测试。谢谢这个答案太高了,与问题的具体内容无关。使用OCMock,我在尝试创建这个模拟时得到了一个“EXC_BAD_ACCESS”,正如你上面所说的。我试图在静态库中运行此测试。你认为这就是导致它的原因吗?自从更新到OCMock 3(它在2中起作用)以来,经历了与AnthonyM相同的事情。