如何解决mock中继承Base64Helper不生效的问题
=============================

#### 问题现象

mock中继承Base64Helper不生效。

问题代码示例参考如下：

_// Base64HelperMock.mock.ets_
import { util } from '@kit.ArkTS'

export class Base64HelperMock extends util.Base64Helper {
  decodeSync(src: string | Uint8Array, options?: util.Type | undefined): Uint8Array {
    return new Uint8Array(\[99,97,10\]);
  }
  encodeSync(src: Uint8Array, options?: util.Type | undefined) {
    return new Uint8Array(\[99,97,10\]);
  }
  encodeToStringSync(src: Uint8Array, options?: util.Type | undefined): string {
    return '';
  }
}

_// mock-config.json5_
{
  "@ohos.util": {
    "source": "src/mock/Base64HelperMock.mock.ets"
  }
}

_//_ _测试文件_
import { util } from '@kit.ArkTS'
import { describe, it } from '@ohos/hypium';

export default function localUnitTest() {
  describe('localUnitTest', () \=\> {
    it('assertContain', 0, () \=\> {
      const array \= new util.Base64Helper().decodeSync('')
    });
  });
}

运行报错如下：

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/14/v3/wtkWrTbfTKyLeVlLxbjdAg/zh-cn_image_0000002658808815.png?HW-CC-KV=V1&HW-CC-Date=20260709T134419Z&HW-CC-Expire=86400&HW-CC-Sign=EA536787E583FB01F341BEF85C65B0E493EB6DBD265021B72F01CD52E540ABD0 "点击放大")

#### 背景知识

[Mock能力](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-test-mock)：在实际开发中，一些接口或者对象依赖于外部资源或复杂的逻辑，这些依赖在测试环境中难以复现，导致这些接口或者对象难以测试，此时，可以使用mock能力，对这些接口或对象进行模拟。

#### 问题定位

请按以下方案进行排查：

1.  确认mock文件的导出方式和被mock接口的导出方式一致。
    
    查看被mock接口的导出方式，可以用Ctrl+鼠标左键点击被mock的接口。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e5/v3/i5etq4F7S8uAXh7qXE9NHA/zh-cn_image_0000002628409548.png?HW-CC-KV=V1&HW-CC-Date=20260709T134419Z&HW-CC-Expire=86400&HW-CC-Sign=768DD018F9E79D21C6310ADB77AE571A32637803946D7141BA3D55B1C16D77DB "点击放大")
    
    查看mock文件的导出方式。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/71/v3/VExXDQuJSCSYZVctRgxvmw/zh-cn_image_0000002628569446.png?HW-CC-KV=V1&HW-CC-Date=20260709T134419Z&HW-CC-Expire=86400&HW-CC-Sign=5AE2D9F3BC5152A572EE4B905ABF00D511F48F6620EE102380F35449AA4CE14A "点击放大")
    

#### 分析结论

mock文件的导出方式和被mock接口的导出方式不一致。

#### 修改建议

mock文件的导出方式要与mock的接口（util接口）的导出方式一致，[util](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-util)接口的导出方式为export default util，所以这边mock文件的导出方式要为export default mockUtil。

1.  在“src/mock”目录下新建一个ArkTS文件，例如Base64HelperMock.mock.ets，在这个文件内定义目标模块的mock实现。
    
    import { util } from '@kit.ArkTS'
    type MockUtil \= Record<string, Object\>;
    
    export class Base64HelperMock {
      decodeSync(src: string | Uint8Array, options?: util.Type | undefined): Uint8Array {
        console.info('run mock')
        return new Uint8Array(\[99,97,10\]);
      }
      encodeSync(src: Uint8Array, options?: util.Type | undefined) {
        return new Uint8Array(\[99,97,10\]);
      }
      encodeToStringSync(src: Uint8Array, options?: util.Type | undefined): string {
        return '';
      }
    }
    
    const mockUtil: MockUtil \= {
      'Base64Helper': Base64HelperMock,
    }
    
    export default mockUtil
    
2.  在mock配置文件“src/mock/mock-config.json5”中定义目标模块与mock实现的映射关系。
    
    {
      "@ohos.util": {
        "source": "src/mock/Base64HelperMock.mock.ets"
      }
    }
    
3.  在测试文件中编写如下代码。
    
    import { util } from '@kit.ArkTS'
    import { describe, it } from '@ohos/hypium';
    
    export default function localUnitTest() {
      describe('localUnitTest', () \=\> {
        it('assertContain', 0, () \=\> {
          const array \= new util.Base64Helper().decodeSync('')
        });
      });
    }