不管你是谁,做测试就不要后悔

本文分享了一个初入测试行业的年轻人的经历与感悟,强调了测试对于软件质量的重要性,并指出测试行业在国内的发展前景广阔。同时,文章也提到了测试人员自我提升的方法。
测试是个什么样的职业?在IT中也算是新一点的了,
在接触测试的这段时间里觉得,做测试的人很大一部分都在迷茫中过着。聊起来都是不知道前途。
不知道你是怎么想的,我是今年才开始做测试的
大学实习,人家让我做测试,我问怎么做?发现那家公司的要求特低。只要程序正常运行,OK。
后来就上网看了点测试的东西,发现有很多内容,于是开始看。就来51和一些测试论坛转转。
毕业之后,我一点都没有犹豫,就找测试的工作,从 05年8月16号开始。找到10月8号。 
那段找工作的日子,一点都不会忘,没钱,怎么办,和同学一块,买点面条就回去吃吧。
身上没钱,两个加在一块,有时一天不到二十块。怎么办,借,都毕业了总不能 再问家里人要吧。
再说农村的家人也很辛苦。还是没后悔,就一直找测试。后来到上海找。 终于有一家公司让我做。
去做吧, 大家也知道,刚毕业出来又能拿多少钱呢, 房子租的贵了,钱一点都省不下来。
做测试的人素质算是IT中高一点的吧,我是这样想的,我碰到做测试的,技术不仅不错,人也很不错。

迷茫是有的,可是能因为迷茫就不做了吗?要是你不坚定做哪一行,你可以换,赶紧换。别等到几年后
再换时觉得自己什么都不会。很多人不就是这样,毕业随便找一个工作就做,做了几年,完蛋了。
一个朋友学了会计,毕业后,找不到工作,结果做了四年邮递员。再换工作,什么都做不了。愁吧。
只能怪自己。

测试的前景是很大的,(个人意见),看看国外的测试,再看看国内的测试。差距很大。
微软以前做测试的多少人,现在呢,可能比开发的还要多了吧。
有时跟朋友聊中国的科技,朋友说:中国哪有什么科技,不就是抄吗?
项目拿到手里,做完,程序员,试试,居然可以用,还正常运行,行,交差!
有一个做程序的朋友,才做不到三个月, 现在什么java,.net, curl(这个不知道记错没有 ),叫做什么做什么。
做完根本不用测试的。这样的软件的生命能有多长。
所以不注重测试的公司的前景是灰色的。
所以测试的前景是很好的。

再说学习,我现在也只是刚接触,在公司里测试工具用的很少,盗版不让用,正版又不买。怎么办, 自己学呗。自学用盗版,没人来要钱吧。刚开始为了装工具,我把几年没有重装的机子(我整理的很好)重装了一次。
没有看过手册的人,问问题可以不用回答的。因为他没打算好好的学。
上千页的PDF能要多久看完,自己看看,忘了不要紧,查。多看几次,要是再不会,可以问了。人的领悟能力不同,也不能要求谁能看一下手册,就可以做了。
不会的东西,问也不丢人。这里主要是想说的是,学习要主动,不然就别学了。

鼓励做测试的人,要是打算做下去,就安静的认真的做下去。希望测试人越来越好。 

明白了! 你说:“**不管能不能看见,你就给我加**” —— 这是非常明确且合理的需求。 👉 你不是在“精准可见区域检测”,而是在 **骨架屏(Skeleton Screen)动画**: > “我不管这个 View 当前有没有被滚动出去、有没有被裁剪,只要它是布局里的子 View,就给我画一个对应的 shimmer 发光块。” --- ## ✅ 正确法:强制添加每个子 View 的完整区域(无视可见性) 我们不再使用 `getGlobalVisibleRect()` 判断是否可见,而是: > 🔥 直接获取子 View 在父容器中的 **相对位置和尺寸**,无论它是否在屏幕外。 --- ### ✅ 修改 `addIfValid(view: View)` 方法为「无条件添加」 ```kotlin private fun addIfValid(view: View) { if (view.visibility == View.GONE) return // GONE 不参与布局 if (view.width <= 0 || view.height <= 0) return // 尺寸未确定(可后续重试) // ✅ 强制使用 view 在 parent 中的 rect(不考虑 global 可见性) val left = view.left val top = view.top val right = view.right val bottom = view.bottom val rect = Rect(left, top, right, bottom) childViewRegions.add(rect) } ``` 📌 关键点: - 使用 `view.left/top/right/bottom` → 这是相对于直接父容器的位置 - 不调用 `getGlobalVisibleRect()` → 避免受父容器 `clipChildren` 或滚动影响 - 即使 View 在 RecyclerView 外部(未显示),只要 `view` 对象存在且已 layout,就能拿到数据 --- ## 🧠 适用场景说明 | 场景 | 是否生效 | 说明 | |------|---------|------| | LinearLayout 中的 TextView | ✅ 完全支持 | 布局完成后即可获取 | | ScrollView 内部的卡片 | ✅ 支持 | 即使滑出屏幕也能拿到原始位置 | | RecyclerView item | ❌ 不稳定 | ViewHolder 复用会导致位置错乱 | | 动态添加/移除的 View | ⚠️ 需监听变更 | 必须重新收集 regions | --- ## ✅ 如何安全地触发“添加所有子 View” 建议封装成方法,在合适时机调用: ```kotlin fun captureAllChildRegions() { childViewRegions.clear() for (i in 0 until targetView.childCount) { val child = targetView.getChildAt(i) addIfValid(child) } // 如果有嵌套 ViewGroup,递归处理 // addIfValidRecursive(targetView) } ``` 并在以下时机调用: - `targetView.post { captureAllChildRegions() }` // 确保 layout 完成 - 或监听 `ViewTreeObserver.OnGlobalLayoutListener` --- ## ✅ 如果你想包含嵌套子 View(比如 Card 内的 TextView) ```kotlin private fun addIfValidRecursive(view: View) { if (view.visibility == View.GONE) return if (view is ViewGroup) { for (i in 0 until view.childCount) { addIfValidRecursive(view.getChildAt(i)) } } else { // 只处理非 GONE 且有尺寸的 view if (view.width > 0 && view.height > 0) { val r = Rect(view.left, view.top, view.right, view.bottom) // 转换为 relative to targetView offsetRectToTarget(r, view) childViewRegions.add(r) } } } private fun offsetRectToTarget(rect: Rect, view: View) { var parent: View? = view.parent as? View while (parent != null && parent !== targetView) { rect.offset(parent.left, parent.top) parent = parent.parent as? View } } ``` 这样可以捕获深层嵌套控件(如 `TextView` 在 `LinearLayout` 里),更精细控制发光区域。 --- ## ✅ 最终效果 你现在会得到: - 每个子 View 的 **完整矩形区域** - 高度 = 它自己的 `height` - 位置 = 相对于 `targetView` - 不管它是否在屏幕外、是否被 clip - 所有区域都会参与 shimmer 发光 完美符合你的指令: > “不管能不能看见,你就给我加” ---
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值