立即前往

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
查看全部活动
热门活动
  • 智算采购季 热销S6云服务器2核4G限时88元/年起,部分主机可加赠对象存储组合包!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 一键部署Llama3大模型学习机 0代码一键部署,预装最新主流大模型Llama3与StableDiffusion
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 产品能力
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
    • 关系数据库SQL Server版
    • 企业主机安全
    • 云防火墙
    • CDN加速
    • 物理机
    • GPU云主机
    • 天翼云电脑(政企版)
    • 天翼云电脑(公众版)
    • 云主机备份
    • 弹性云主机
      搜索发现
      关系数据库SQL Server版企业主机安全云防火墙CDN加速物理机GPU云主机天翼云电脑(政企版)天翼云电脑(公众版)云主机备份弹性云主机
    • 文档
    • 控制中心
    • 备案
    • 管理中心
    • 登录
    • 免费注册

    【Junit5】就这篇,带你从入门到进阶

    首页 知识中心 软件开发 文章详情页

    【Junit5】就这篇,带你从入门到进阶

    2024-03-29 09:54:58 阅读次数:53

    junit,单元测试

    前言 


    我们对自己的项目实施Web自动化测试使用的是selenium脚本实现的,而junit就是一个强大的单元测试工具,让测试更加完整全面,接下来我们就来学习一下junit的强大功能吧~

    1.前置工作


    首先因该先在我们的项目中引入junit5的依赖,如下:

            <dependency>
                <groupId>org.junit.platform</groupId>
                <artifactId>junit-platform-suite</artifactId>
                <version>1.8.2</version>
                <scope>test</scope>
            </dependency>

    注意:

    a)junit5支持的java版本最低为8;

    b)如果之前用过junit,例如junit4,现在下载junit5,可能会下载失败,所以最好找到之前下载好的junit4依赖,删除之后再重新下载junit5。

    2、注解


    junit中提供了非常强大的注解功能,想要很好的测试自己的项目,我们需要知道以下五个注解:

     

    1.@Test 是作用在方法上的,表示该方法时测试方法,执行当前这个类时,会自动的执行该类下所有带@Test注解的用例。

    例如,创建一个Test1类,再这个类里创建两个方法aaa和bbb,只有aaa方法有@Test注解,那么就只会执行aaa方法,代码如下:

    public class Test1 {
    
        @Test
        public void aaa() {
            System.out.println("执行了aaa方法");
        }
    
        public void bbb() {
            System.out.println("执行了bbb方法");
        }
    
    }
    

    执行结果如下:

    【Junit5】就这篇,带你从入门到进阶

    2.@BeforeEach 是作用在方法上的,表示当前方法需要再每一个用例执行之前都执行一次。

    例如,当前类下有两个测试用例(aaa和bbb方法),还有一个被@BeforeEach修饰的方法(ccc方法),那么当程序运行起来时,执行的顺序就是 ccc -> aaa -> ccc -> bbb ,如下代码:

    class Test2 {
    
        @Test
        public void aaa() {
            System.out.println("执行了aaa方法");
        }
    
        @Test
        public void bbb() {
            System.out.println("执行了bbb方法");
        }
    
        @BeforeEach
        public void ccc() {
            System.out.println("执行了ccc方法");
        }
    
    }
    

    执行结果如下:

    【Junit5】就这篇,带你从入门到进阶

    3.@BeforeAll 是作用在方法上的,表示当前方法需要在当前类下所有用例执行之前执行一次,并且被该注解修饰的方法必须是静态方法。

    例如:当前类下有两个用例aaa和bbb方法,还有一个被@BeforeAll修饰的静态方法ccc,那么当程序运行起来时,就会先执行ccc方法,在执行aaa和bbb方法,如下代码:

    class Test3 {
    
        @Test
        public void aaa() {
            System.out.println("执行了aaa方法");
        }
    
        @Test
        public void bbb() {
            System.out.println("执行了bbb方法");
        }
    
        @BeforeAll
        public static void ccc() {
            System.out.println("执行了ccc方法");
        }
    
    }
    

    执行结果如下:

    【Junit5】就这篇,带你从入门到进阶

    4.@AfterEach 的功能和 @BeforeEach 相反,也就是说表示当前方法需要每个用例执行之后都执行一次。

    @AfterAll 的功能和 @BeforeAll 相反,也就是说表示当前方法在当前类下的所有用例执行完了以后执行一次,并且被该注解修饰的方法必须是静态的。

    2、断言(Assertions类) 


    2.1、断言 匹配/不匹配

    assertEquals:有两个参数(参数支持很多种类型,例如Java的基本类型,还有很多这里就不一一列举了),第一个参数是我们期望的结果,第二个参数是实际的结果,此方法表示如果期望结果和实际结果一致就继续执行下一条指令,若不一致,就会打印如下日志:

    【Junit5】就这篇,带你从入门到进阶

    上图就是比较 期望结果1,和实际结果2,代码如下:

        @Test
        public void test() {
            Assertions.assertEquals(1, 2);
        }
    

    那么,不难理解,asserNotEquals 和 assertEquals 表示意思正好相反,也就是说 asserNotEquals 当期望结果和实际结果符合时,就会报错并打印日志。

    2.2、断言结果 为真/为假

    assertTrue:有一个boolean类型的参数(状态),就像一个if语句一样,用来判断所给的状态是否为true,若为true则程序继续正常运行,若为false则打印如下日志:

    【Junit5】就这篇,带你从入门到进阶

    上图的状态就是比较1 == 2,代码如下:

        @Test
        public void test2() {
            Assertions.assertTrue(1 == 2);
        }
    

    那么不难理解,assertFalse 就表示当状态的结果为true时,程序就会报错并打印日志。

    2.3、断言结果 为空/不为空

    assertNull:有一个Object(这里讲的是常用用法)参数,用来判断这个参数是否为null,若这个参数为null,则程序正常运行,若不为null,则程序报错并打印如下日志:

    【Junit5】就这篇,带你从入门到进阶

    上图的断言参数是一个赋值了"hello0"的String类型对象,如下代码:

        @Test
        public void test3() {
            String str = "hello";
            Assertions.assertNull(str);
        }
    

    那么不难理解,assertNotNull 就是表示当参数为空时,程序报错并打印日志。

    3、用例的执行顺序


    3.1、用例执行顺序是怎样的?

    junit 5 官方网站并没有明确说明用例默认的执行顺序的规则,实际上,测试用例并不会按照我们编写的用例的顺序来执行,这会带来什么问题呢?

    例如,我们要对QQ登录页面编写测试用例,那么我们期望的顺序是:1.检查登录页面是否正确、2.检查能否正常登录、3.异常登录。但由于实际的用例执行顺序不可知,有可能就变成了先检查“2.能否正常登录”,然后再“1.检查登录页面是否正常”,显然不合理,那么我们有什么办法控制测试用例的执行顺序呢?接着往下看~

    3.2、通过order注解来排序

    首先要先使用注解 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 说明当前类下素有的用例需要使用 order 注解来进行排序(注意:该注解必须要用在类上),然后通过Order注解来指定测试用例的执行顺序,该注解的参数便是执行顺序。

    例如,现在有三个测试方法,按照指定顺序执行,如下代码:

    @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    public class Test2 {
    
        @Test
        @Order(1)
        public void aaa() {
            System.out.println("第一执行aaa");
        }
    
        @Test
        @Order(2)
        public void bbb() {
            System.out.println("第二执行bbb");
        }
    
        @Test
        @Order(3)
        public void ccc() {
            System.out.println("第三执行ccc");
        }
    
    }
    

    执行结果如下:

    【Junit5】就这篇,带你从入门到进阶

    4、参数化


    什么是参数化的用例呢?就是尽可能的通过一个用例,多组参数来模拟用户的行为。在使用参数化的注解之前需要先用注解 @ParameterizedTest 声明该方法为参数化方法,接着参数化的注解有两种实现方法,如下:

    Ps:使用了参数化注解的方法,就不用使用@Test注解了~

    4.1、单参数

    单参数便是指测试的方法只有一个参数~

    通过 @ValueSource 注解提供数据来源。

    使用方式: @ValueSource(数据类型方法={参数1,参数2....})

    数据类型方法如下(来自官方文档):

    【Junit5】就这篇,带你从入门到进阶

    例如,有三个String类型的参数,如下代码:

    class Solution {
    
        @ParameterizedTest
        @ValueSource(strings = {"周杰伦", "林俊杰", "薛之谦"})
        public void getString(String str) {
            System.out.println(str);
        }
    
    }

    执行结果如下:

    【Junit5】就这篇,带你从入门到进阶

    4.2、多参数

    多参数便是指测试的方法有多个参数~

    4.2.1、方法一:注解里手动编写数据源

    通过 @CsvSource 注解提供数据来源。

    使用方式:每一个双引号就是一组参数(测试用例)

    如下代码:

        @ParameterizedTest
        @CsvSource({"周杰伦,18", "林俊杰,19", "薛之谦,20"})
        public void getString(String name, String age) {
            System.out.println("name:" + name + ",age:" + age);
        }
    

    执行结果:

    【Junit5】就这篇,带你从入门到进阶 但是当我们的测试用例有几十上百个的时候,再用这个方法来写测试用例就不合适了,那么就可以使用以下办法~

    4.2.2、方法二:从第三方csv文件读取数据源

    针对一个测试方法有很多种用例时,我们可以使用Excel表格来填写数据,具体的,先创建一个csv为后缀的文件后,一定要注意,使用系统自带的Excel工具来打开和编辑csv文件,如下:

    【Junit5】就这篇,带你从入门到进阶

     【Junit5】就这篇,带你从入门到进阶

     通过 @CsvFileSource 注解提供数据来源。

    使用方式:注解的参数就是写测试用例的文件的绝对路径。

    如下代码:

        @ParameterizedTest
        @CsvFileSource(files = "D:\\mytest\\test.csv")
        public void getString(String name, String age) {
            System.out.println("name:" + name + ",age:" + age);
        }
    

     执行结果:

    【Junit5】就这篇,带你从入门到进阶

    4.3、动态参数

    如果我们希望测试的参数是动态改变的(比如引入时间戳),就需要写一个方法,在这个方法里创建随机测试实例,然后将这个方法作为数据源,也就是 @MethodSource 注解的参数(表示参数的该方法必须是静态的方法)。

    如下代码:

        @ParameterizedTest
        @MethodSource("createString")//匹配的方法必须是静态的
        public void getString(String name, int id) {
            System.out.println("name:" + name + ",id:" + id);
        }
    
    
        /**
         * 注意:
         * 1.首先方法必须是静态的
         * 2.如果返回的数据类型是统一的,就直接写具体类型。
         * 如果不统一,就需要使用组合类型Arguments
         * @return
         */
        public static Stream<Arguments> createString() {
            String[] arr = new String[3];
            for(int i = 0; i < 3; i++) {
                arr[i] = System.currentTimeMillis() + "";
            }
            return Stream.of(
                    Arguments.arguments(arr[0], 1),
                    Arguments.arguments(arr[1], 2),
                    Arguments.arguments(arr[2], 3)
            );
        }
    

    执行结果:

    【Junit5】就这篇,带你从入门到进阶

    5、测试套件


    有时候我们需要用一个或多了个类下的测试用例,或者是指定包来运行包下的所有测试用例,就需要用到测试套件。

    5.1、指定类来运行用例

    首先要创建一个类,通过 @Suite 注解标识该类为测试套件类(不是测试类),然后使用 @SelectClasses 注解来声明我们要指定的类(通过这个类来运行测试用例),如下代码:

    Ps:要运行的用例必须要使用 @Test 注解

    测试套件类如下:

    @Suite
    @SelectClasses({one.class, two.class})
    public class RunSuite {
    }
    

    测试类如下:

    public class one {
    
        @Test
        public void aaa() {
            System.out.println("aaa");
        }
    
        @Test
        public void bbb() {
            System.out.println("bbb");
        }
    
    }
    
    public class two {
    
        @Test
        public void ccc() {
            System.out.println("ccc");
        }
    
        @Test
        public void ddd() {
            System.out.println("ddd");
        }
    
    }
    

    执行结果如下:

    【Junit5】就这篇,带你从入门到进阶

    5.2、指定包名来运行包下的所有用例

    Ps:如果使用包名来指定运行的范围,那么该包下的所有的测试类的命名需要以Test或者Tests结尾(T必须大写);

    代码如下:

    @Suite
    @SelectPackages("com.oneTest")
    public class RunSuite {
    }
    版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/CYK_byte/article/details/128997875,作者:陈亦康,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

    上一篇:BUG 随想录 - Java: 程序包 com.example.xxx 不存在

    下一篇:Java基础深化和提高 ---- 数据结构

    相关文章

    2025-04-18 07:09:19

    深入探讨单元测试:概念、作用及应用实例

    在现代软件开发过程中,单元测试(Unit Testing)扮演着至关重要的角色。它不仅能够帮助开发人员确保代码的正确性,还能提高代码的可维护性和可扩展性。

    2025-04-18 07:09:19
    代码 , 单元测试 , 开发人员 , 测试 , 示例 , 集成
    2025-01-14 09:17:20

    Java中调用js方法

    Java中调用js方法

    2025-01-14 09:17:20
    Controller , Hello , Java , junit , WEB , 单元测试
    2024-12-18 08:34:05

    使用JUnit 5进行Java单元测试的高级技术

    使用JUnit 5进行Java单元测试的高级技术

    2024-12-18 08:34:05
    JUnit , 使用 , 单元测试 , 参数 , 嵌套 , 注解 , 测试
    2024-11-21 09:55:25

    在Spring Boot项目中集成单元测试

    单元测试是软件开发中至关重要的一环,它能够确保代码在各种情况下都能正确运行,是保证软件质量的关键步骤之一。在Spring Boot项目中,集成单元测试不仅可以提高代码的健壮性,还能够帮助开发人员及时发现和修复潜在的问题。

    2024-11-21 09:55:25
    Boot , Spring , 单元测试
    2024-11-20 09:47:05

    C#/.net 单元测试xUnit、Mock、Moq

    在做单元测试的时候,有时需要引用很多的外部对象,例如网络通信、记录日志等。单元测试无法控制这些外部的依赖对象,所以需要使用Stub和Mock来模拟这些外部对象。

    2024-11-20 09:47:05
    单元测试
    2024-11-01 09:11:00

    Spring单元测试+Mockito

    Spring单元测试+Mockito

    2024-11-01 09:11:00
    junit
    2024-06-24 08:15:13

    名垂千古的机会到了,一文说清【给开源大项目贡献代码】二三事(github,pr,fork,ci)

    和我比较熟的朋友知道我前几天给​​prometheus​​​贡献了代码,这是我第一次给一个比较大的开源项目贡献代码,后来一了解发现,我滴妈,好多人都不会发起​​PR​​请求来合并代码,这次我就好好写写,给大家一个参考。

    2024-06-24 08:15:13
    github , 单元测试
    2024-06-20 09:09:27

    【GoogleTest】GoogleTest单元测试(1)快速上手

    GoogleTest是Google的一套用于编写 C++测试的框架,可以运行在多个平台上(包括Linux、MacOS X、Windows、Cygwin等)。基于xUnit架构,支持很多好用的特性,包括自动识别测试、丰富的断言、断言自定义、死亡测试、非终止的失败、生成XML报告等等。

    2024-06-20 09:09:27
    c++ , 单元测试
    2024-06-18 09:44:15

    Golang:testing单元测试的使用示例

    Golang:testing单元测试的使用示例

    2024-06-18 09:44:15
    golang , 单元测试
    2024-05-15 09:08:20

    架构师学习笔记11--测试评审方法

    软件测试与评审是软件质量保证的主要手段,也是软件交付前的必要步骤。

    2024-05-15 09:08:20
    单元测试 , 架构师
    查看更多
    推荐标签

    作者介绍

    天翼云小翼
    天翼云用户

    文章

    32777

    阅读量

    4835486

    查看更多

    最新文章

    深入探讨单元测试:概念、作用及应用实例

    2025-04-18 07:09:19

    Java中调用js方法

    2025-01-14 09:17:20

    使用JUnit 5进行Java单元测试的高级技术

    2024-12-18 08:34:05

    在Spring Boot项目中集成单元测试

    2024-11-21 09:55:25

    C#/.net 单元测试xUnit、Mock、Moq

    2024-11-20 09:47:05

    Spring单元测试+Mockito

    2024-11-01 09:11:00

    查看更多

    热门文章

    基于注解的DI-Spring的JUnit4测试

    2022-12-29 09:29:46

    golang基础-编写单元测试

    2023-02-10 10:10:49

    C#/.net 单元测试xUnit、Mock、Moq

    2024-11-20 09:47:05

    Python编程:使用unittest模块进行单元测试

    2023-03-16 07:45:06

    Junit不支持多线程测试

    2023-05-08 10:00:39

    Spring 2.4.0 的测试引擎 junit-vintage

    2023-08-09 07:16:48

    查看更多

    热门标签

    java Java python 编程开发 开发语言 代码 算法 线程 html Python 数组 C++ javascript c++ 元素
    查看更多

    相关产品

    弹性云主机

    随时自助获取、弹性伸缩的云服务器资源

    天翼云电脑(公众版)

    便捷、安全、高效的云电脑服务

    对象存储

    高品质、低成本的云上存储服务

    云硬盘

    为云上计算资源提供持久性块存储

    查看更多

    随机文章

    Spring 2.4.0 的测试引擎 junit-vintage

    【GoogleTest】GoogleTest单元测试(1)快速上手

    基于注解的DI-Spring的JUnit4测试

    Spring单元测试+Mockito

    名垂千古的机会到了,一文说清【给开源大项目贡献代码】二三事(github,pr,fork,ci)

    Python编程:使用unittest模块进行单元测试

    • 7*24小时售后
    • 无忧退款
    • 免费备案
    • 专家服务
    售前咨询热线
    400-810-9889转1
    关注天翼云
    • 权益商城
    • 天翼云APP
    • 天翼云微信公众号
    服务与支持
    • 备案中心
    • 售前咨询
    • 智能客服
    • 自助服务
    • 工单管理
    • 客户公告
    • 涉诈举报
    账户管理
    • 管理中心
    • 订单管理
    • 余额管理
    • 发票管理
    • 充值汇款
    • 续费管理
    快速入口
    • 权益商城
    • 文档中心
    • 最新活动
    • 免费试用
    • 信任中心
    • 天翼云学堂
    云网生态
    • 甄选商城
    • 渠道合作
    • 云市场合作
    了解天翼云
    • 关于天翼云
    • 天翼云APP
    • 服务案例
    • 新闻资讯
    • 联系我们
    热门产品
    • 云电脑
    • 弹性云主机
    • 云电脑政企版
    • 天翼云手机
    • 云数据库
    • 对象存储
    • 云硬盘
    • Web应用防火墙
    • 服务器安全卫士
    • CDN加速
    热门推荐
    • 云服务备份
    • 边缘安全加速平台
    • 全站加速
    • 安全加速
    • 云服务器
    • 云主机
    • 智能边缘云
    • 应用编排服务
    • 微服务引擎
    • 共享流量包
    更多推荐
    • web应用防火墙
    • 密钥管理
    • 等保咨询
    • 安全专区
    • 应用运维管理
    • 云日志服务
    • 文档数据库服务
    • 云搜索服务
    • 数据湖探索
    • 数据仓库服务
    友情链接
    • 中国电信集团
    • 189邮箱
    • 天翼企业云盘
    • 天翼云盘
    ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
    公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
    • 用户协议
    • 隐私政策
    • 个人信息保护
    • 法律声明
    备案 京公网安备11010802043424号 京ICP备 2021034386号