как обновить TyphoonConfig во время выполнения

#typhoon

#тайфун

Вопрос:

Я создаю фабрику внутри testcase

           (TyphoonComponentFactory*)integrationTestFactory
{
    static TyphoonComponentFactory* factory;
    static dispatch_once_t onceToken;
    dispatch_once(amp;onceToken, ^
    {
        factory = [[TyphoonBlockComponentFactory alloc] initWithAssemblies:@[
            [MainAssembly assembly],
            [Kernel assembly],
            [NetworkComponents assembly],
            [PersistenceComponents assembly]
        ]];

        //Other config here. . . 
        TyphoonConfigPostProcessor *configurer = [TyphoonConfigPostProcessor configurer];
        [configurer useResourceWithName:@"testConfig.properties"];
        [factory attachPostProcessor:configurer];
        //this may be necessary
        [factory makeDefault 

    });
    return factory;
}
  

Затем доступ к нему

   - (void)setUp
{
    [super setUp];

    factory_instance = [LoginTest integrationTestFactory];
}
  

Наконец, доступ к сборке выдает значение ошибки для config ключ не настроен

 DAO *dataManager = [(DaoAssembly*)factory_instance DAO];
  

Сборка выглядит следующим образом

-(id)DAO {

 return [TyphoonDefinition withClass:[DAO class] configuration:^(TyphoonDefinition* definition)
        {
            [definition useInitializer:@selector(shareManager)];
            [definition injectProperty:@selector(apikey) with:TyphoonConfig(@"api.key")];
            [definition injectProperty:@selector(dataParser) with:[self dataParser]];
            definition.scope = TyphoonScopeSingleton;

        }];
  

}

Ответ №1:

Я не могу воспроизвести то, что вы испытываете, что подтверждается следующим тестовым примером.

Пожалуйста, попробуйте этот простой пример для себя — возможно, он прольет некоторый свет на то, в чем проблема.

SomeProperties.properties:

 damsels.rescued=12
  

Knight.h /.m:

 @interface Knight : NSObject

@property(nonatomic) NSUInteger damselsRescued;

@end
  

MyAssembly.m:

 - (id)knight
{
    return [TyphoonDefinition withClass:[Knight class] configuration:
        ^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(damselsRescued)
             with:TyphoonConfig(@"damsels.rescued")];        
    }];
}
  

IntegrationTests.m:

 @interface IntegrationTests : XCTestCase
{
    TyphoonComponentFactory *_factory;
}


@end

@implementation IntegrationTests

  (TyphoonComponentFactory *)integrationTestFactory
{
    static TyphoonComponentFactory *factory;
    static dispatch_once_t onceToken;
    dispatch_once(amp;onceToken, ^{
        factory = [[TyphoonBlockComponentFactory alloc] initWithAssemblies:@[
            [MyAssembly assembly],
        ]];

        //Other config here. . .
        TyphoonConfigPostProcessor *configurer = [TyphoonConfigPostProcessor configurer];
        [configurer useResourceWithName:@"SomeProperties.properties"];
        [configurer useResourceWithName:@"SomeOtherProperties.properties"];
        [factory attachPostProcessor:configurer];
        [factory makeDefault];
    });
    return factory;
}


- (void)setUp
{
    _factory = [IntegrationTests integrationTestFactory];
}

- (void)testPropertiesAreSet
{
    Knight *knight = [(InfrastructureComponentsAssembly *) _factory knight];
    XCTAssertEqual(knight.damselsRescued, 12);
}

@end
  

Комментарии:

1. проблема решена,, ошибка возникла из-за того, как был настроен файл pod с добавлением typhoon как к основной, так и к тестовой цели.