将父类更改为另一个只是不起作用?

时间:2016-06-16 13:32:05

标签: ios objective-c xcode xcode7

我创建了一个父测试用例类。我希望将其他测试用例从继承XCTestCase更改为ParentTestCase

ParentTestCase.m:

@interface ParentTestCase : XCTestCase
@end

@implementation ParentTestCase

  - (void)setUp {
    [super setUp];
  }

  - (void)tearDown {
    [super tearDown];
  }
}

例如,我有另一个测试用例类,当我创建它时,我使用默认的XCTestCase作为其父类。所以,代码是这样的:

                              // If I change this to ParentTestCase,
                              // I get error:
                              // "Can't find interface declaration for 'ParentTestCase'"
    @interface OtherTestCase : XCTestCase
    @end

    @implementation OtherTestCase

      - (void)setUp {
        [super setUp];
      }

      - (void)tearDown {
        [super tearDown];
      }
    } 

如果我直接将上述代码的父类更改为ParentTestCase, 我收到编译器错误:

"Can't find interface declaration for 'ParentTestCase'

但是如果我从头开始,创建一个新的测试用例类,在xcode弹出窗口中明确告诉ParentTestCase的子类。那很好: enter image description here

为什么直接更改现有代码中的父类不起作用?

如何重构现有的测试类以继承XCode中的另一个类?

====更新===

对于那些认为我应该导入标题的人来说,这是从头创建的类:

#import <XCTest/XCTest.h>

@interface SomeOtherTest : ParentTestCase

@end

@implementation SomeOtherTest

- (void)setUp {
    [super setUp];
}

- (void)tearDown {
    [super tearDown];
}
}

也没有来自XCode的标头导入。

我也试图像某些人建议的那样导入标题:

#import "ParentTestCase.h"

我收到错误'ParentTestCase.h' file not found。我对此错误并不感到惊讶,因为单元测试类没有公共头文件。

1 个答案:

答案 0 :(得分:0)

@Putz1103是对的 - 您需要导入标头才能使用子类。如果从问题中显示的弹出窗口生成一个类,顶部是否有导入语句?

测试类在同一个文件中有标题和实现,因为它更整洁(不需要为每个类都有两个文件,因为你通常不会继承)。没有什么可以阻止您手动创建头文件并导入它。

使用iOS / Source / Cocoa Touch Class模板添加父类,并选择XCTestCase作为超类。这将生成一个单独的头和实现文件。然后,您将能够在其他任何位置导入该标头。