激活时,从正常和测试目标复制Typhoon组件

时间:2016-04-05 07:45:13

标签: ios typhoon

我想为程序集本身编写测试,以确保我没有告诉程序集注入一个在注入的类中不存在(不再存在)的属性。由于这会在运行时导致错误,我想确保程序集可以注入,例如正确的视图控制器,无需在应用程序中手动导航到视图控制器进行测试。

我有一组用Objective-C和Swift编写的混合程序集。 一个简单的测试看起来像这样: OBJ-C:

@interface ViewControllerAssemblyTests : XCTestCase
@property (nonatomic, strong) ViewControllerAssembly *sut;
@end
@implementation ViewControllerAssemblyTests
- (void)setUp {
    [super setUp];
    self.sut = [ViewControllerAssembly new];
    [self.sut activate];
}
- (void)testInstantiateSignInViewController {
    // When
    SignInViewController *vc = [self.sut signInViewController];
    // Then
    XCTAssertNotNil(vc.alertService);
}
@end

夫特:

class ViewControllerAssemblyTests: XCTestCase {
    var sut: ViewControllerAssembly!
    override func setUp() {
        super.setUp()
        self.sut = ViewControllerAssembly()
        self.sut.activate()
    }
    func testExample() {
        // When
        let vc = self.sut.signInViewController() as! SignInViewController
        // Then
        XCTAssertNotNil(vc.alertService)
    }
}

运行用Objective-C编写的测试工作正常。但是,在激活程序集时,使用Swift测试编写的测试失败:Key '...' is already registered。 我发现TyphoonCollaboratingAssembliesCollector发现用Swift编写的程序集两次 - 一次在app目标中,再一次在测试目标中,这会在尝试注册程序集的键时导致上述错误。

这一切都归结为方法inspectedClass的{​​{1}}参数的类型,它是运行Obj-C测试时应用程序目标的正确程序集,但它是来自的错误程序集运行Swift测试时测试目标。我明显地将组件添加到两个目标,以便能够在测试中访问它们。

我目前的解决方法是简单地在Obj-C中编写测试,但有没有解决方案,所以我可以在Swift中编写测试?

0 个答案:

没有答案