Как изменить ApplicationConfig.plists между XCTests

Наше приложение получает содержимое из службы, указанной в ApplicationConfig.plist. Мне нужно 4 XCTestCases использовать четыре различных ApplicationConfig.plist. Как это лучше всего настроить?

Поскольку эти тесты являются тестами производительности, я не могу изменить службы после запуска тестов, поэтому мне нужно установить службы (через файл конфигурации) перед первым запуском.

1 ответ

  1. Swift вспомогательный тестовый код

    // You will need to get the bundle path of the test app to pass to the main app
    func getBundlePath() -> String
    {
        let bundle = Bundle.main
        let bundlePath = bundle.builtInPlugInsPath! + "/" + ((bundle.infoDictionary?["CFBundleName"])! as! String) + ".xctest"
        return bundlePath
    }
    
    // Launch the app and pass it the path to the test app and the name of the plist you want to use
    func launchAppWithPlist(_ plistName: String) -> XCUIApplication
    {
        // Launch the app between tests
        let app = XCUIApplication()
        app.launchEnvironment = ["use_custom_plist" : plistName, "path_to_test_app" : getBundlePath()]
        app.launch()
    
        return app
    }
    

    Swift тест

    launchAppWithPlist("YourPlistFileName")
    

    ApplicationDelegate (Цель C)

    static NSString* const kCustomAppConfigKey = @"use_custom_plist";
    static NSString* const kPathToTestAppKey = @"path_to_test_app";
    
    NSDictionary *environment = [[NSProcessInfo processInfo] environment];
    NSString *pathToConfigFile = [environment[kCustomAppConfigKey] lastPathComponent];
    NSString *pathToTestBundle = [[[environment[kPathToTestAppKey] pathComponents] valueForKey:@"description"] componentsJoinedByString:@"/"];
    NSBundle *bundle = [NSBundle bundleWithPath:pathToTestBundle];
    

    Оттуда, вы можете использовать (тест) пакет, чтобы получить plist внутри