本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
以下是鸿蒙(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 '测试环境配置'
通过这种结构化设计,可以实现:
- 环境隔离:测试/生产配置完全分离
- 一键切换:通过编译参数或运行时函数快速切换
- Mock集成:测试数据自动注入
- 可测试性:便于单元测试验证
2543

被折叠的 条评论
为什么被折叠?



