社区
Delphi
帖子详情
关于单元测试的问题,我怎么测试类的私有方法呢?
老码不识途
2006-06-20 09:28:09
如题,多谢各位有经验的GGJJDDMM帮忙,有分嘀!
...全文
493
4
打赏
收藏
关于单元测试的问题,我怎么测试类的私有方法呢?
如题,多谢各位有经验的GGJJDDMM帮忙,有分嘀!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wangqi19820913
2006-10-24
打赏
举报
回复
数据库程序:DBUnit
网络程序:htmlUnit、httpUnit
老码不识途
2006-10-10
打赏
举报
回复
多谢楼上两位,那么数据库程序,网络程序如何进行单元测试呢?
ysai
2006-06-21
打赏
举报
回复
私有方法肯定是要被调用的,否则那段代码就是废代码
比如函数A私有,而函数B公有并调用了函数A,那直接测试B不就行了?
wudi_1982
2006-06-21
打赏
举报
回复
不明白你想怎么测试,如果只是简单的测试功能,那么直接测试不就完了,或者是先把私有改成公有的。。
当然,除了这些也有别的办法,例如用DELPHI中的tlist举例。看看TLIST的源码,你会发FCount是一个私有域,理论上我们无法直接访问。但看看他的源码,我们可以注意到一点,我们看到,Count读是直接读FCount的值,而写操作是调用SetCount()函数。仔细思考一下这个问题:既然“Count读是直接读FCount的值”,那么,Count的地址是不是也直接指向FCount呢???
让我们用一段代码来证明它:
program testFixCount;
uses classes, Dialogs, sysUtils;
var t : TList;
pCount : ^Integer;
begin
t := TList.create;
pCount := @t.Count; //取得地址?
ShowMessage(IntToStr(pCount^));
t.Count := 10000;
ShowMessage(IntToStr(pCount^));
end.
很明显,pCount成功地得到了FCount的地址。我们可以很快完成这样的一段代码来测试对FCount私有域的直接写访问:
program testFixCount;
uses classes, Dialogs, sysUtils;
var t : TList;
pCount : ^Integer;
begin
t := TList.create;
pCount := @t.Count;
pCount^ := 10;
showMessage(IntToStr(t.Count));
end.
如果域不提供公用访问接口,那么,也就无法取到它的地址。
再看源码,我们发现,在private域的定义中,FList和FCount被连续定义,从数据结构的角度来看,通常它们在内存中占用连续的空间。事实上,在Delphi中也正是如此处理的。因此,我们只需要得到FList的地址,并用“@List+SizeOf(PPointerList)”,就可以得到FCount的地址了。
这意味着,只要我们可以突破一个私有域,我们就可以通过地址计算的方法来突破全部的私有域!
二维码 google zxing.zip
二维码 google zxing.zip
机器学习MATLAB,由Packt出版_MATLAB for Machine Learning, published b
机器学习MATLAB,由Packt出版_MATLAB for Machine Learning, published by Packt.zip
利用CameraX和Firebase ML Kit实现二维码读取器.zip
利用CameraX和Firebase ML Kit实现二维码读取器.zip
安卓二维码扫描器ZXing精简版.zip
安卓二维码扫描器ZXing精简版.zip
JIGSAW(GEO)的MATLAB绑定——一种用于地球科学建模的非结构化网格生成器。_MATLAB bindings
JIGSAW(GEO)的MATLAB绑定——一种用于地球科学建模的非结构化网格生成器。_MATLAB bindings for JIGSAW(GEO)_ an unstructured mesh generator for geoscientific modelling..zip
Delphi
5,930
社区成员
262,937
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章