鸿蒙开发中 如何配置测试/生产环境

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

        以下是鸿蒙(HarmonyOS)开发中 测试/生产 环境配置的完整实现,包含配置分离、Mock数据注入和条件初始化等关键环节,代码示例如下:

一、项目结构准备

/src/main/ets
├── config
│   ├── index.ets         # 环境配置出口
│   ├── dev.ets           # 开发环境配置
│   ├── prod.ets          # 生产环境配置
│   └── test.ets          # 测试环境配置
├── mock
│   ├── index.ets         # Mock数据入口
│   └── userMock.ets      # 用户模块Mock
├── pages
│   ├── index.ets         # 模块入口
│   └── MainPage.ets      # 主页面
└── entryability
    └── EntryAbility.ets  # 能力层

二、环境配置模块实现

1. 环境配置文件
// config/test.ets
export default {
  env: 'test',
  apiBaseUrl: 'http://mock-api.example.com',
  enableMock: true
};

// config/prod.ets
export default {
  env: 'prod',
  apiBaseUrl: 'https://real-api.example.com',
  enableMock: false
};

// config/index.ets (动态导出)
import testConfig from './test';
import prodConfig from './prod';

let config = prodConfig; // 默认生产环境
if (process.env.NODE_ENV === 'test') {
  config = testConfig;
}

export default config;

2. Mock数据模块

// mock/userMock.ets
export const mockUsers = [
  { id: 1, name: '测试用户A' },
  { id: 2, name: '测试用户B' }
];

// mock/index.ets
import { mockUsers } from './userMock';
import config from '../config';

export default {
  initAll() {
    if (!config.enableMock) return;

    console.info('Mock数据初始化...');
    globalThis.mockUserList = mockUsers; // 挂载到全局
  }
};

三、测试环境初始化入口

1. 模块入口文件
// pages/index.ets
import router from '@ohos.router';
import config from '../config';
import mock from '../mock';

export default {
  onCreate() {
    // 1. 根据环境初始化
    if (config.env === 'test') {
      mock.initAll();  // 初始化Mock数据
      console.info('测试环境配置加载完成');
    }

    // 2. 统一路由跳转
    router.pushUrl({ 
      url: config.env === 'test' ? '/test/MainPage' : '/prod/MainPage'
    });

    // 3. 注入环境变量到页面
    globalThis.appConfig = config;
  }
};

 2. 页面中使用环境变量

// pages/MainPage.ets
@Entry
@Component
struct MainPage {
  @State users: Array<{id: number, name: string}> = [];

  aboutToAppear() {
    // 根据环境获取数据
    if (globalThis.appConfig?.enableMock) {
      this.users = globalThis.mockUserList || [];
    } else {
      this.loadRealData(); // 实际API调用
    }
  }

  build() {
    List() {
      ForEach(this.users, (user) => {
        ListItem() {
          Text(user.name).fontSize(20)
        }
      })
    }
  }
}

四、测试环境切换方案

1. 编译时切换(推荐)

build-profile.json5中配置:

{
  "buildOption": {
    "env": {
      "NODE_ENV": "test" // 设置为test时自动加载test配置
    }
  }
}

2. 运行时动态切换

// 在Debug菜单中添加环境切换按钮
function setTestEnv(enable: boolean) {
  const newConfig = enable ? require('../config/test') : require('../config/prod');
  globalThis.appConfig = newConfig;
  
  if (enable) {
    require('../mock').initAll();
  }
}

五、完整测试用例示例

1. 单元测试(使用ohos-unitTest)
// test/example.test.ets
import { describe, it, expect } from 'ohos-unitTest';
import config from '../src/main/ets/config';

describe('环境配置测试', () => {
  it('测试环境URL验证', () => {
    process.env.NODE_ENV = 'test';
    const testConfig = require('../src/main/ets/config').default;
    expect(testConfig.apiBaseUrl).assertEqual('http://mock-api.example.com');
  });
});

2. Mock数据测试

// test/userMock.test.ets
import { mockUsers } from '../src/main/ets/mock/userMock';

describe('用户Mock数据', () => {
  it('应包含2个测试用户', () => {
    expect(mockUsers.length).assertEqual(2);
    expect(mockUsers[0].name).assertContain('测试用户');
  });
});

六、调试与验证

1. 查看当前环境
// 在任意页面添加调试按钮
Button('打印环境变量')
  .onClick(() => {
    console.info('当前环境:', JSON.stringify(globalThis.appConfig));
    console.info('Mock数据:', globalThis.mockUserList);
  })

 2. 日志过滤

adb logcat | grep '测试环境配置'

通过这种结构化设计,可以实现:

  1. 环境隔离:测试/生产配置完全分离
  2. 一键切换:通过编译参数或运行时函数快速切换
  3. Mock集成:测试数据自动注入
  4. 可测试性:便于单元测试验证
HarmonyOS中判断当前应用运行环境开发环境测试环境)通常依赖于构建配置环境变量的设置。开发者可以通过配置不同的构建变体(Build Variants)来区分开发测试生产环境,并在代码中根据这些配置进行判断。以下是一些常用的方法: ### 使用构建配置标志 在构建过程中,可以通过构建工具(如DevEco Studio)配置不同的构建变体,每个变体可以有不同的环境标志。例如,可以在`build-profile.json5`文件中定义环境变量: ```json { "buildOption": { "env": { "BUILD_TYPE": "debug" } } } ``` 然后在代码中读取该环境变量以判断当前运行环境: ```typescript let buildType = process.env.BUILD_TYPE; if (buildType === 'debug') { // 当前为开发环境 } else if (buildType === 'release') { // 当前为生产环境 } ``` ### 使用特定API进行环境判断 HarmonyOS提供了一些API用于管理应用的生命周期和环境信息,可以通过这些API获取当前应用的运行状态和环境信息。例如,使用`@ohos.bundle`模块获取应用信息: ```typescript import bundle from '@ohos.bundle'; bundle.getApplicationInfo('com.example.myapp', bundle.ApplicationFlag.FLAG_ABILITIES, 100, (error, data) => { if (error) { console.error(`Failed to get application info: ${JSON.stringify(error)}`); return; } console.info(`Application info: ${JSON.stringify(data)}`); if (data.isDebuggable) { // 当前为开发或调试环境 } else { // 当前为生产环境 } }); ``` ### 使用日志或调试信息 在开发测试阶段,可以启用特定的日志输出或调试功能,通过检查这些日志或功能是否启用,也可以间接判断当前运行环境。 ### 使用远程配置服务 还可以使用远程配置服务(如华为AppGallery Connect的远程配置)来动态控制应用的行为。通过远程配置,可以在不更新应用的情况下切换应用的运行环境设置。 ### 总结 通过上述方法,开发者可以灵活地判断当前应用运行在HarmonyOS上的具体环境。这些方法不仅有助于开发者在不同阶段进行适当的调试和测试,也有助于提高应用的安全性和可维护性[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值