ios - 是否可以在静态方法中 OCMock 类调用?

标签 ios unit-testing mocking ocunit ocmock

我刚刚开始使用 OCMock,所以请耐心等待 - 我一直在浏览文档和大量示例,但尚未找到明确的答案 - 例如,是否可以在静态方法中模拟 init 调用:

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace
{        
    CTTeleInfo *netInfo = [[CTTeleInfo alloc] init];
    CTCarrier *carrier = [netInfo subscriberCell;
    NSString *mobileNetwork = [carrier carrierName];
    if ( mobileNetwork == nil )
        mobileNetwork = @"Unknown";

}

是否可以在不更改代码的情况下模拟 CTTeleInfo 对象?

最佳答案

这不是 OCMock 可以帮助你的。即使它可以模拟类方法(目前还不能),那么您仍然必须将 netInfo 对象的创建提取到模拟可以覆盖的方法中。

如果您可以更改代码,显而易见的解决方案是:

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace
{   
    [self addHeaderToRequest:request namespace:namespace carrier:[[CTTeleInfo alloc] init]];
}

+ (NSString *)addHeaderToRequest:(NSString *)request namespace:(NSString *)namespace carrier:(CTCarrier *)carrier
{ 
    NSString *mobileNetwork = [carrier carrierName];
    if ( mobileNetwork == nil )
        mobileNetwork = @"Unknown";
}

关于ios - 是否可以在静态方法中 OCMock 类调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070652/

相关文章:

java - HttpSession 联合测试

ios - 尽管嵌入在 NavigationController 中,但 UINavigationBar 未显示

ios - 崩溃 : Engine Marked As Needing Optimization

python-3.x - python 3 : mock a method of the boto3 S3 client

java - Junit 扩展测试用例来测试 child

c# - 对使用 Windows 身份验证的 Controller 进行单元测试

testing - 在 TestCafe 中可以注册 xhr 并用作模拟(自动模拟)

ios - 动态对比文本颜色

ios - 无法在 iOS 的 phonegap 中滚动 mobiscroll 选择滚动条

node.js - 如何用 Jest 模拟所需的模块功能?