写testcase时对反射机制的一点小心得

本文介绍如何在Java中通过反射机制跨包访问一个继承自抽象类的保护成员变量。具体步骤包括使用Class对象获取DeclaredField,设置可访问性,并通过对象获取变量值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.比如在Camera的test case里面想获取Gallery2中的某个抽象类类的一个protected变量。此抽象类在Camera 中实现。

想访问Gallery2中的surfaceTextureScreenNail中的mRequestCount变量。

protected int mRequestCount = 0;

...在Camera中的CameraScreenNail.java extends surfaceTextureScreenNail

直接访问变量mRequestcount = ...

进行赋值引用。

 

即:A包里面有个abstract B类,C包里面有个D extends B 类,和E类,想在E里面访问B类的protected变量。

 

(1)  B.class.getDelaredField("string");  

//string为你想访问的那个变量,这里一定要用B,不能用D,也就是一定要用定义这个变量的那个类,而非其子类。

//这样返回一个Field类型的变量

Field fid =  B.class.getDelaredField("string");  

(2) fid.setAccessible(true);

(3) fid.get(object);

此object可以用子类D的object,此中:

先在Camera.java中获取CameraScreenNail(D) object,然后通过传入此object得到mRequestCount变量。而CameraScreenNail在ActivityBase中定义。

 

完整代码:

Field fd = ActivityBase.class.getDeclaredField("mCameraScreenNail");

fd.setAccessible(true);

CameraScreenNail csn = (CameraScreenNail)fd.get(mActivity);

其中mActivity是Camera object。

上面通过Camera把定义在ActivityBase中的mCameraScreenNail拿到了,下面再通过

CameraScreenNail拿到其父类的变量mRequestCount;

Field fid = SurfaceTextureScreenNail.class.getDeclaredField("mRequestCount");

fid.setAccessible(true);

int fpsJisuan = (Intefer)fid.get(csn);

 

这样就可以了。

总结:通过XX.class.getDeclaredField("变量名")得到这个变量名的Field 类型 的fd;

再setAccessible(true);

最后再fd.get(object);

object为"变量名"的类对象。

转载于:https://www.cnblogs.com/snowdrop/articles/2949667.html

### 如何编软件测试用例或单元测试 #### 测试用例的设计原则 在设计测试用例,应遵循一定的原则以确保其有效性。这些原则包括但不限于全面覆盖功能需求、考虑边界条件和异常情况等[^2]。 #### 编测试用例的具体方法 以下是关于如何编测试用例的一些具体指导: 1. **需求分析** 根据软件的功能需求文档,明确测试的目标和范围。这一步骤对于后续的测试用例设计至关重要[^2]。 2. **定义输入与期望输出** 明确每种场景下的输入数据及其对应的预期结果。例如,在一个加法函数 `add(a, b)` 中,如果输入 `(a=3, b=5)`,则期望输出为 `8`[^1]。 3. **编测试脚本** 使用合适的编程语言或工具来实现自动化测试。以下是一个基于 Python 的简单单元测试示例: ```python import unittest def add(a, b): return a + b class TestAddFunction(unittest.TestCase): def test_add_positive_numbers(self): self.assertEqual(add(3, 5), 8) # 正常情况下两个正数相加的结果验证[^1] def test_add_negative_numbers(self): self.assertEqual(add(-1, -1), -2) # 负数相加的情况验证 def test_add_mixed_numbers(self): self.assertEqual(add(-1, 1), 0) # 混合正负数相加的情况验证 if __name__ == "__main__": unittest.main() ``` 4. **执行并记录结果** 执行编的测试用例,并仔细记录每次运行的实际结果与预期结果之间的差异。如果有不一致的地方,则需进一步排查原因[^2]。 5. **持续优化** 基于前期测试中发现的问题不断调整和完善现有的测试用例集,使其更加贴合实际应用场景的变化趋势。 #### 工具支持 为了提高效率,可以借助专门用于辅助生成或者管理测试用例的相关工具。比如利用 XMind 来规划初步想法再转换成结构化的 XML 文件供 TestLink 导入使用[^5];又或者是直接采用像 Redmine 这样的综合型项目管理系统内置的支持模块完成整个生命周期内的管理工作流[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值