世界新动态:什么是单元测试?对开发程序有什么好处?
相信单元测试是属于那种没有用过也听过的技术(如果你是大佬,听过也用过,欢迎提出宝贵的意见🧎♀️🧎♂️)。那么到底什么是单元测试,单元测试在实际项目开发中能给我们带来什么样的好处?我们站在前端开发的角度一起来聊一聊单元测试。
(资料图片)
(一)什么是单元测试
单元测试概念
这个便是对百度百科上对单元测试的介绍,那么对于我们前端来说单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
大多数单元测试包括四个主体:
测试套件describe、测试用例it、判定条件expect、断言结果toEqual。
什么不是单元测试
在了解了什么是单元测试的基础上,那么什么不是单元测试呢?在《修改代码艺术》一书上有这样的介绍:
需要访问数据库的测试不是单元测试需要访问网络的测试不是单元测试需要访问文件系统的测试不是单元测试
以上便是对单元测试概念的简单介绍,那么为什么要使用单元测试,单元测试有什么优势,不考虑回报的程序员不是好的程序员。
(二)单元测试对我们开发程序有什么好处
首先是一个前端单元测试的根本性原由:JavaScript 是动态语言,缺少类型检查,编译期间无法定位到错误; JavaScript 宿主的兼容性问题。比如 DOM 操作在不同浏览器上的表现。
正确性:测试可以验证代码的正确性,在上线前做到心里有底。
自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到保证。通过编写测试用例,可以做到一次编写,多次运行。
解释性:测试用例用于测试接口、模块的重要性,那么在测试用例中就会涉及如何使用这些API。其他开发人员如果要使用这些API,那阅读测试用例是一种很好地途径,有时比文档说明更清晰。
驱动开发,指导设计:代码被测试的前提是代码本身的可测试性,那么要保证代码的可测试性,就需要在开发中注意API的设计,TDD将测试前移就是起到这么一个作用。
保证重构:互联网行业产品迭代速度很快,迭代后必然存在代码重构的过程,那怎么才能保证重构后代码的质量呢?有测试用例做后盾,就可以大胆的进行重构。
我们知道 高覆盖率的单元测试,可以保证每次上线bug率大大降低,也是代码重构的基础。很多老项目,开发人员离职、新接手的人员不敢重构,慢慢称为团队负担、又不能下线,就是因为没有单元测试,改一点都怕出现不可测的bug。简单来说,也可以概括为以下几点
提高代码质量减少bug,快速定位bug放心地修改、重构单元测试不但会使你的工作完成得更轻松。而且会令你的设计会变得更好,甚至大大减少你花在 调试上面的时间
(三)如何编写单元测试用例
如何编写单元测试用例,单元测试用例的原则是什么:
测试代码时,只考虑测试,不考虑内部实现;数据尽量模拟现实,越靠近现实越好,充分考虑数据的边界条件下·对重点、复杂、核心代码、重点测试利用AOP(面向切面编程),减少测试代码,避免无用功能测试、功能开发相结合,有利于设计和代码重构
插一个小知识点:那么这里提到的AOP是什么意思,AOP是Aspect Oriented Program的首字母缩写意思是面向切面编程,这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。 一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
再简单了解了单元测试之后我们将其带入到我们实际项目开发中,来尝试一下
(四)组件化后,组件哪部分最具测试价值?(以React为例)
1. Component
Component 应着重关注render以及副作用,同时业务逻辑的处理过程,都应该尽量提取到Hooks和Utils文件中。因此,对于Component的测试,我们完全可以将重心主要放在以下这两方面问题上:
组件是否正常渲染了?组件副作用是否正常处理了?
2. Hooks
如何测试React Hooks,社区目前已有相对成熟的解决方案,即@testing-library/react-hooks + react-test-renderer[2]。通过这两个依赖,开发人员可以很轻松的mock出Hooks执行所依赖的环境,把store的数据当作hooks的输入,关注在hooks内的业务逻辑,即可把Hooks当作纯方法(Pure Function)来进行测试。
3. Redux
对于Redux,如果项目在使用 Redux Toolkit 的话,事情会简单很多,开发人员只需要关注Dispatch的Actions即可。但如果Actions和Reducer是分开编写,则需要针对性处理
4. Service
不同项目或团队对Service的定义各不相同,这里我们要聊的主要指负责处理HTTP请求的request和response,以及相应的异常处理的数据层。Service主要的功能是对接Action,因而理想情况下Service只需要包含与API通信的代码,这种情况下,UT可有可无。但一些场景下,如果项目中没有使用BFF承担数据处理的角色,后端也没能提供完全符合前端数据结构需求的接口时,不可避免的,开发人员需要在此处完善数据处理的逻辑,以便获取清洗或聚合后的数据,因而这种情况下,UT覆盖是非常有必要的。
5. Utils/Helpers
Utils/Helpers主要包含以下几类类型: 数据结构的转化,各种convert工具函数 数据结构的处理,比如数据提取、合并压缩、整理工具函数 公共的工具函数 根据我们目前的项目习惯,当一段逻辑需要在Utils/Helpers中实现时,那么它一定是纯函数,其中多数情况又会包含一定程度的数据处理逻辑,所以基本都需要UT覆盖
在了解了项目组件哪些部分最具有测试价值之后,我们就要上手了,跃跃欲试中🤸♀️🤸♂️
(五)如何让我们的测试用例更易编写、维护?
举个例子,先看代码,看不看得懂不重要🧎♀️,我们先来了解一下
// production codeconst computeTotalAmount = (products) => { return products.reduce((total, product) => total + product.price, 0); }// testing codeit("should return summed up total amount 1000 when there are three products priced 200, 300, 500", () => { // given - 准备数据 const products = [ { name: "nike", price: 200 }, { name: "adidas", price: 300 }, { name: "lining", price: 500 }, ] // when - 调用被测函数 const result = computeTotalAmount(products) // then - 断言结果 expect(result).toBe(1000)})
可以看到我们首先定义了一个computeTotalAmount的待测函数,it包裹了我们的测试用例。在测试用例中,首先第一步:准备数据,然后调用被测函数,最后输出断言结果。 可以看到这样的结果清晰明了。好的单元测试应该遵循AAA的模式,AAA模式:编排(Arrange),执行(Act),断言(Assert)。可以让你写出比较清晰的测试结构,既易于阅读,也易于编写
编写单元有以下几个编写原则:
mock数据集中管理,考虑mock数据极端情况
只关注输入输出,不关注内部实现
一个单元测试只测一个业务场景
如此你才能给它一个好的描述,这个测试才能保护这个特定的业务场景,挂了的时候能给你细致到输入输出级别的 业务反馈。
表达力极强,不包含逻辑
表达力强的测试,能在失败的时候给你非常迅速的反馈,看到测试时,你就知道它测的业务点是啥 测试挂掉时,能清楚地知道失败的业务场景、期望数据与实际输出的差异,跟写声明式的代码一样的道理,测试需要都是简单的声明:准备数据、调用函数、断言,让人一眼就明白这个测试在测什么。如果含有逻辑,你读的时候就要多花时间理解;一旦测试挂掉,你咋知道是实现挂了还是测试本身就挂了呢?
运行速度快
可以使用mock适当隔离掉三方的依赖,将依赖、集成等耗时、依赖三方返回的地方放到更高层级的测试中,有策略性地去做
隔离性
单元测试是对代码独立的单元进行测试,这个独立的意思不是说这个函数(单元)不会调用另外一个函数(单元),而是说我们在测试这个函数的时候如果它有调用到其它的函数我们就需要mock它们,从而将我们的测试逻辑只放在被测试函数的逻辑上,不会受到其它依赖函数的影响
最后我们带入项目实际开发一下吧
(六)react单元测试框架enzyme实际应用
1. 测试工具:主要用到的测试工具是 jest 和 enzyme
2. 待测组件:可以添加删除的一个简单列表;
3. 我们想要测试四点:
1、组件渲染
2、渲染时初始待办事项的展示
3、我们可以创建一个新的待办事项然后返回三个待办事项
4、我们可以删除一个初始的待办事项并且只留下一个
上代码ing.....
上组件
import React, { useState, useRef } from "react";const Todo = () => { const [list, setList] = useState([ { id: 1, item: "Fix bugs" }, { id: 2, item: "Take out the trash" } ]); const todoRef = useRef(); const removeTodo = id => { setList(list.filter(todo => todo.id !== id)); }; const addList = data => { let id = list.length + 1; setList([ ...list, { id, item: data } ]); }; const handleNewTodo = e => { e.preventDefault(); const item = todoRef.current; addList(item.value); item.value = ""; }; return (Add Todo Add Task Lists{!list.length ? (No task!) : ({list.map(todo => { return ({todo.item} removeTodo(todo.id)} > 删除 ); })})});};export default Todo;
组件很简单,一个添加一个删除的简单功能,但是直接看代码会感觉乱七八糟的,一点也不清晰明了,那么我们来看测试用例,乌拉......
import React from "react";import { shallow, mount } from "enzyme";//import "jsdom-global/register";//在测试单测完成度时打开import App from "./App";describe("Todo", () => { //将一个组件渲染成虚拟DOM对象,但是只渲染第一层,不渲染所有子组件,所以处理速度非常快 it("组件渲染", () => { shallow(); }) it("查询li个数", () => { const wrapper = mount(); //mount可以渲染组件APP下的所有子组件 expect(wrapper.find("li")).toHaveLength(2); //我们通过find找到元素li,因为有组件中list有两条默认数据,所以元素li应该是有两个,我们直接输出断言结果。 }); it("调用addList", () => { const wrapper = mount(); wrapper.find("input").instance().value = "新增加一个"; //这里同理找到input元素,并给其赋值“新增加一个” expect(wrapper.find("input").instance().value).toEqual("新增加一个"); //赋值完成后,我们找到对应的input元素,查询input的值,增加断言判断是否为“新增加一个” wrapper.find("[type="submit"]").simulate("click"); //找到type为submit的button,触发click事件 expect(wrapper.find("li")).toHaveLength(3); //断言li的长度是否为3 expect(wrapper.find("li div span").last().text()).toEqual("新增加一个"); //断言最后一个li(新添加的那一个),其中子元素span的值是否为“新增加一个” }); it("调用removeTodo", () => { const wrapper = mount(); wrapper.find("li button").first().simulate("click"); //找到以一个li中的button,触发click事件 expect(wrapper.find("li")).toHaveLength(1); //触发删除按钮后,查询li的长度,应该为1 expect(wrapper.find("li div span").last().text()).toEqual("Take out the trash"); //最后查询第一个li的子元素span, 它的值是否为Take out the trash })});
那么我们运行一下 yarn test
可以看到每个测试用例的运行时间
我们再来试一下单测覆盖度 jest --coverage
可以看到我们的覆盖率(lines)是100%的
最后小编在学习过程中整理了一些学习资料,可以分享给做软件测试工程师的朋友们,相互交流学习,需要的可以加入我的学习交流群 323432957 或加微dingyu-002即可免费获取Python自动化测开及Java自动化测开学习资料(里面有功能测试、性能测试、python自动化、java自动化、测试开发、接口测试、APP测试等多个知识点的架构资料)
标签: 单元测试
相关推荐:
精彩放送:
- []全球热议:dnf野猪怎么打?dnf打野猪有什么方法?
- []环球热点评!陈思诚和佟丽娅一起演了什么电影?看完你就明白了
- []360极速浏览器如何导出数据和收藏夹?360极速浏览器导出数据和收藏夹
- []视点!ios14.8系统好用吗?ios14.8值得更新吗?
- []世界观察:浦东建设一季度新签工程项目金额97.14亿元 同比增加80%
- []录音软件哪个好?推荐几款最常用的录机软件
- []西游降魔篇几几年上映的?主演阵容曝光
- []translate是什么意思?translate的用法介绍
- []焦点快报!如何清洗喷墨打印机的打印头?喷墨打印机喷头清洗的方法
- []环球要闻:round是什么意思?RUND32.dll加载出错怎么办?
- []资讯:360云盘怎么转存百度云盘?360云盘转存百度云盘详细步骤
- []母亲节发多少红包给妈妈合适?吉利数字含义介绍
- []蓖麻怎么种植?关于蓖麻种植的介绍
- []热门:电脑关不上机怎么办?shutdown定时关机命令详解
- []焦点观察:如何使用PTDD分区表?详细教程介绍
- []环球热头条丨java中的死锁如何优化?mysql之锁优化
- []【天天新视野】华为手机如何管理应用权限?华为手机管理应用权限步骤
- []成都特警基地内的网红打卡地 你去过几个?
- []天天快消息!诺基亚800c如何刷机?800c诺基亚刷机步骤介绍及刷机方法
- []【世界快播报】千金药业:公司千金大药房全国布局没有政策限制
- []全球快报:准考证怎么打印?计算机二级考试准考证打印流程及注意事项
- []世界热头条丨K8s安装部署怎么操作?K8S集群安装部署及操作说明
- []儿童玩具店怎么装修效果图?玩具店装修设计的七大要点
- []世界微动态丨腾讯手机管家怎么样?腾讯手机管家详情介绍
- []自行车变速器怎么调节?自行车变速怎么调?
- []环球滚动:明朝历代皇帝年号一览表 明朝帝王世系大全
- []世界新动态:500G硬盘价格多少?500G硬盘品牌价钱性能介绍
- []最新资讯:iPodnano7值不值得购买?iPod nano7配置介绍
- []今日播报!碳纤维发热电缆电地暖怎么样?碳纤维地暖和发热电缆电地暖有什么区别?
- []蚂蚁庄园太阳镜片颜色越深防紫外线效果越好吗?详情介绍
- []常青股份:公司2022年度向特定对象发行A股股票预案已提交交易所,目前处于审核阶段
- []当前热点-维信诺:截至2023年3月31日,公司股东人数为44422户
- []什么叫ied设备?什么是IE浏览器?
- []焦点速读:米老鼠微信主题红包怎么玩?米老鼠微信主题气泡设置教程方法
- []环球播报:dnf跨界石怎么得?地下城与勇士游戏介绍
- []每日热闻!三星大器7732怎么样?三星大器7732深度评测
- []世界通讯!何制作CDlinux的U盘启动方法 资源及下载地址
- []什么是家庭影院?家庭影院的播放系统有哪些?
- []如何使用iPhone手机的各种技巧?超全面iPhone实用技巧汇总
- []如何快速解决打印机喷头堵塞问题?清洗打印机喷头方法
- []世界热推荐:如何安装笔记本的双硬盘?笔记本双硬盘安装步骤
- []Linux新板子起不来及红外屏配置 linux服务器修改内核默认配置的方法
- []天天日报丨多立方浴霸有什么优点? 多立方浴霸优点详细介绍
- []环球微资讯!如何理解数据的保密性和完整性?数据的保密性与完整性
- []世界短讯!舒乐康空气净化器怎么样?空气净化效果好吗?
- []计算机病毒查杀方法有哪些?基于数据流的计算机病毒查杀方法及特征
- []每日速讯:联想平板android版本怎么升级?联想乐Pad A1平板安卓4.0升级操作详细教程
- []当前滚动:程控电话交换机原理是什么?数字程控交换机的基本构成
- []微速讯:知识点补充:什么是互质?互质的详情介绍
- []世界播报:拼多多猜拳游戏怎么玩?怎么进入游戏界面?
- []局域网上任意主机怎么控制?软件实现局域网流量控制
- []每日简讯:【游戏设计】3.2详细设计游戏的操作流程
- []全球时讯:抖音时间倒流是什么?抖音时光倒流使用方法
- []世界热讯:财面儿丨招商蛇口:前3月实现合同销售额722.66亿元 同比增加52.65%
- []最新消息:怎么申请miui12.5内测版本?miui12.5内测答案是什么?
- []windows7系统下的MTU值如何修改?具体操作方法
- []联通4G跳到3G无法上网的原因是什么?如何恢复4G上网?
- []【论文推荐】远程屏幕监控系统项目分析
- []如何用指针申请动态内存?函数的参数是一个指针吗?
- []看热讯:税收分类编码怎么用?开票软件上怎么操作?
- []快报:免费个人网站怎么建立?免费个人网站建立流程
- []全球新资讯:合肥今起恢复公积金异地贷款
- []【世界播资讯】郑州公布2023年680个市重点建设项目名单 总投资1.08万亿元
- []今日热搜:深圳罗湖区发放5000万购车补贴 个人最高获10万元补贴
- []环球快看点丨TD早报 | 锦江与雅高签署谅解备忘录;广州会展业回暖激活商旅市场
- []环球视讯!2021年养老金计算公式 2021养老金计算公式是怎样的
- []焦点速看:双预警!通州明后天阵风8级!伴有沙尘!注意防范——
- []社保卡激活了是不是金融功能就开通了,不一定
- []解局 | 建发一周三城拿地记:“保守观望”和“规模扩张”
- []公积金可以取几次,有以下四种情况
- []环球观天下!悟空保是什么保险如何退保
- []过户车保险费为什么这么贵,原因有以下三点
- []当前热点-公允价值计量的交易性金融资产_公允价值计量
- []动态:思科瑞2022年净利9742.6万同比增长0.38% 总经理马卫东薪酬100万
- []民和股份:公司种鸡减值确认后不转回,待种鸡淘汰时转销对应的减值金额
- []焦点热门:GQY视讯:公司将在提升内部管理促进工作效能提升的同时,更积极主动应对市场机会
- []快来,在这条“樱花大道”邂逅春日浪漫!
- []环球速讯:气垫鞋跑步好吗(气垫鞋跑步好)
- []msci中国指数是什么意思
- []消息!公司一上市就发财了吗
- []世界热点!中国a股总市值
- []路程除以耗油量等于什么
- []当前焦点!重庆证券公司怎么样啊
- []【时快讯】究极绿宝石叉字蝠怎么进化?双腿变翅膀,论叉字蝠神奇的演化路线
- []世界热议:保利发展前三月销售1141.3亿?月内57亿新增四宗地块
- []观天下!公司名称翻译成英文怎么写_公司名称翻译成英文
- []6折人才房将成历史?深圳明确:取消安居房和人才房!
- []观焦点:迎大运动起来 全国劳模与成都职工代表乐动全城
- []当前报道:动态市盈率是什么
- []焦点短讯!gloryhole是什么
- []当前视讯!同花顺模拟炒股输光了需要投资者返还资金吗
- []热点聚焦:股市开盘是什么意思
- []世界最资讯丨福布斯发布2023全球亿万富豪榜;海底捞高层指考核方式升级;爱马仕计划加速扩张中国市场;淘宝APP首页测试新增99特卖频道
- []环球最资讯丨股市怎么样才能赚钱
- []焦点短讯!常青科技:募资加码研发创新,推动核心技术自主可控
- []星期六股票代码是多少
- []当前焦点!金价还会跌吗
- []【环球速看料】电子体温计测量哪个部位最准确
- []世界新消息丨中铁隧道股份有限公司是国企还是央企
- []科创50有哪些股票
- 鳄鱼有舌头吗(鳄鱼的舌头可以防止水倒灌吗)
- 当前观察:每日净值是什么意思
- 当前看点!债权投资减值准备能够转回吗
- 天天滚动:政府为什么不强制贾跃亭回国
- 当前聚焦:福州期货开户哪家公司比较好
- 视焦点讯!汗斑怎么治疗彻底根除_汗斑的最佳治疗方法
- 焦点日报:一季度国家铁路客货运输两旺
- 滚动:刚买了三者没买不计免赔怎么办
- 实时:公积金提前还款
- 医保比例单位和个人怎么计算
- 当前头条:房屋结构安全鉴定报告_房屋结构
- 环球热门:共创储能新时代|比亚迪储能荣膺第十一届储能国际峰会暨展览会ESIE2023多项大奖
- 权威发布:科华数能用户侧储能系统出货量TOP1
- 世界热议:“风起水涌,能量聚拢”| 科陆重磅发布Aqua、Aero、Byzer储能新品
- 特变电工新能源携光储新品亮相储能国际峰会
- 环球焦点!聚焦ESIE2023 | 兴储世纪与行业一起迈步新征程
- 每日热讯!蜂巢能源叠片短刀L500型325Ah储能专用电芯首次亮相储能国际峰会
- 教人开网店的骗局_网上教开网店是真是假
- 【天天聚看点】瑞源电气与您相约第十一届储能国际峰会,我们在6号馆(S86)等您!
- 全球焦点!1八成干的香肠冷冻能放多久?
- 今日热议:房子,竟然成了万恶之源
- 天天简讯:透露大模型进展以及英伟达合作情况,AI操作系统龙头亮了!这些高增长低估值股热度爆棚
- 快资讯:鑫铂股份:修订后的考核指标2应是增长至的概念,公司已就上述笔误进行了更正,详见巨潮资讯网
- 招商银行信用卡咖啡风暴10元来袭!
- 尉氏附近有好玩的地方吗 尉氏有什么好玩儿的吗 尉氏附近有好玩的地方吗在哪
- 空客在华获160架新飞机订单;新东方将布局文旅产业 | 大公司简报
- 天天新消息丨特锐德:有一定的出口外销,但对公司充电业务总收入的影响不大
- 全民推方块好玩吗 全民推方块玩法简介
- 世界信息:qdll基金是什么意思
- 股票分红分的是不是自己的钱
- 新股申购可以撤单吗
- 当前滚动:赵薇娱乐公司叫什么
- 做空为什么跌了还赚钱
- 【世界快播报】中国在台海军演可不是“炸鱼”,而是炸台独的心和胆,矫正美台对台海形势的预期
- 天天时讯:仅租金收入就高达百亿 新城控股连续五年经营性现金流净流入
- 视讯!企业为什么选择在科创板上市
- 【全球新要闻】TE Connectivity @2023年储能国际峰会暨展览会
- 长城是由谁建造的
- 【环球报资讯】创业板指数基金有哪些
- 跨国公司有哪些
- 今日热讯:工银价值是什么基金
- 保障额度是什么意思,保险金额
- 环球关注:被车撞了怎么跟保险公司沟通赔偿,有以下四步
- 当前资讯!社保买两年不买可退回钱吗,满足条件可以退
- 环球短讯!新能源汽车自燃保险公司赔付吗,购买了自燃险会赔付
- 私企有公积金吗,有
- 【环球时快讯】直击现场!沃太能源亮相北京ESIE展,"新一代"能源技术备受瞩目!
- 环球新消息丨a股和美股哪个适合散户
- 每日短讯:深化储能业务布局 首航携光储系统解决方案亮相ESIE2023
- 【独家】杠杆效应是什么
- 注册制有什么特点
- 风投基金是什么意思
- “数”说数字政府建设“山东样本”
- 今日热议:ipo啥意思
- 创业板和科创板的区别
- 震荡股票怎么操作
- 环球播报:龙腾光电荣膺电博会金奖,卓越技术引领行业
- 前沿热点:股市大跌的原因
- 天天快消息!权重股是指哪些股票
- 权重股什么意思
- 观点:交通运输部部署开展2023年中国航海日活动
- 世界滚动:“豫”见恐龙骨架化石数字作品限量发行
- 腾讯视频与抖音达成合作,推动长短视频融合发展
- 每日信息:3600亿巨头出手!联手两大新能源公司,要干这件大事
- 【全球速看料】这群HUSTer,在山沟沟里种出“金坨坨”!
- 焦点短讯!买瓶洗发水送女票
- 国潮吸引创业者
- 每日报道:李国庆羡慕周鸿祎平和离婚背后,与俞渝离婚大战鸡飞狗跳
- 阳光车险为啥便宜,阳光车险的理赔流程有哪些
- 配置占比大幅提升 机构频频现身科创板股
- 环球微资讯!股票行情快报:天元股份(003003)4月7日主力资金净买入55.04万元
- 中交地产2022年收入385亿?较上年增长164.52%
- 天天快报!LG化学金惠子:中国医美市场潜力巨大,高端市场尤需持续发力
- 天天报道:中交地产2022年净利润0.34亿元丨年报快讯
- 快讯:苏宁环球披露前期会计差错更正 涉及2021年度末未分配利润数据
- 天天观热点:新能源车险保费大增背后:赔付率超油车,行业如何提升利润?
- 天天新消息丨专访陆家嘴董事长徐而进:集团优质资产注入 三年内预计预收款项近400亿元
- 每日热讯!3月上海二手房成交套数达20个月新高:挂牌量充足,价格稳定
- 环球观察:专访:对中国经济长期向好充满信心——访美敦力全球高级副总裁顾宇韶
- 每日关注!招商蛇口一季度签约销售金额722.66亿元 同比增长超五成
- 当前快讯:严跃进:新力退市、蓝光预警,防范房企债务危机演变为股市危机
- 机构评3月非农:美国就业增长虽降温,但美联储5月加息不可避免?
- 云海金属:青阳项目按计划是今年投产
- 世界要闻:湖北能源:公司信息披露严格按照监管部门相关要求办理,无应披未披事项
- 全球百事通!运动品牌“双雄”安踏、李宁“失速”,成长性陷入瓶颈,高端化困难重重
- 国内游热度走高,全国多地知名景区官宣免票
- 城投控股一季度主要房地产项目新增签约金额4570万元
- 金融街预计2023年与控股股东关联交易不超3.1亿
- 当前短讯!郑州楼市再放大招!公积金最高可贷100万
- 天天百事通!天健集团按比例支付深圳坪山土地价款?代价4.84亿元
- 世界今日报丨鱼跃医疗:公司会根据对应产品所处阶段、业务推广的进度,合理安排产能配置
- 天天快看点丨融创房地产等被执行超12亿 融创房地产3天被执行69次
- 通裕重工:国有控股后,公司树立了“打造国际一流的能源装备制造商及知名的功能材料供应商”的战略目标
- 世界视讯!欧普康视:公司不是AI类企业,产品中会根据需要吸收采用必要的AI技术
- 世界观焦点:国任财险副总经理马昌明任职资格批复
- 民生银行参展“第十一届国际储能峰会”并举办“聚力储能 和合共生”金融论坛
- 财信发展为4家子公司提供181.03万元担保
- 全球播报:香江控股2022年营收60.55亿元 销售金额24.41亿元
- 头条焦点:振邦智能:目前微逆产品已完成样机的测试,目前正在进行型式测试、并网测试等,争取早日通过认证
- 今日关注:粤海股份:城启集团等五家企业破产清算案获得通过