测试代码怎么写
1.应该如何编写测试代码
产品类:classCMyClass{public:intAdd(inti,intj);CMyClass();virtual~CMyClass();private:intmAge;//年龄CStringmPhase;//年龄阶段,如少年,青年};建立对应的测试类CMyClassTester,为了节约编幅,只列出源文件的代码:voidCMyClassTester::CaseBegin(){//pObj是CMyClassTester类的成员变量,是被测试类的对象的指针,//为求简单,所有的测试类都可以用pObj命名被测试对象的指针。
2.怎么写Java测试代码
可以用main函数和JUnit来写测试代码。main是最早使用的,但是现在更流行的测试工具是JUnit。
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
下面是一些具体的编写测试代码的技巧或较好的实践方法:
1. 不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。
2. 不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。
3. 避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。
4. 当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。
5. 将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.)
6. 测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。
7. 确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。
8. 如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。
9. 尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。
10.测试要尽可能地小,执行速度快。
11.不要硬性规定数据文件的路径。
12.利用Junit 的自动异常处理书写简洁的测试代码
事实上在Junit 中使用try-catch 来捕获异常是没有必要的,Junit 会自动捕获异常。那些没有被捕获的异常就被当成错误处理。
13. 充分利用Junit 的assert/fail 方法
assertSame()用来测试两个引用是否指向同一个对象
assertEquals()用来测试两个对象是否相等
14. 确保测试代码与时间无关
15. 使用文档生成器做测试文档。
3.如何编写可测试的代码
1、勿将对象的构建与应用逻辑混合在一起。
通常在写UT时,你需要实例化程序的一部分(理想情况是只有所测类),给对象一些输入,最后对对象的行为进行判定。为了能单独的实例化一个类,我们需要确保这个类不实例化其它的类(这些类不再实例化更多的类,以此类推),许多开发人员喜欢将new 操作符穿插在应用逻辑代码当中。
为了使你的代码具备可测试性,你需要两种类。第一种是工厂类,这些类包含了大量的 new 操作符,它们负责为你的程序生产类,不做其它的事情。
另一种是应用逻辑类,它不包含 new 操作符,只包含应用逻辑。事实上,测试的目的就是为了测试应用逻辑。
当应用逻辑中去除了 new 操作符之后,对象的创建就变得很容易,于是我们可以在测试中替换这些依赖(Mocks)。
4.什么是测试代码
I Phoenix/Tandy300000 1. 由一系列代码(不含“00”和“FF”)到“FF”或“00”,则主板自检已通过,OK。
2. 出“00”,且不变码,则为主板没有运行,查CPU坏否、CPU跳线、或CPU设置正确否、电源正常否、主板电池等处有否发霉?3. 如果您在CMOS中设置为不提示错,则遇到非致命性故障时,诊断卡不会停下来而接着往后走一直到“00”,解决方法为更改CMOS设置为提示所有错误再开机,这时若有非致命故障则停住,再根据代码排错。 同左 同左01 处理器测试1,处理器状态核实,如果测试失败,循环是无限的。
试换CPU,查CPU跳线或CPU设置错否? 处理器寄存器的测试即将开始,非屏蔽中断即将停用。建议排除方法同左 CPU寄存器测试正在进行或者失灵。
建议排除方法同左02 确定诊断的类型(正常或者制造)。如果键盘缓冲器含有数据就会失效。
试查主板中与键盘相关电路及键盘本身。 使用非屏蔽中断;通过延迟开始。
查主板和CPU。 CMOS写入/读出正在进行或者失灵。
试查主板电池等。代码 Award AMI Phoenix/Tandy300003 清除8042键盘控制器,发出TEST-KBRD命令(AAH)。
查键盘内部电路及软件。 通电延迟已完成 ROM BIOS检查部件正在进行或失灵。
查主板BIOS芯片是否已插好或周边电路发霉。04 使8042键盘控制器复位,核实TESTKBRD。
查主板中键盘接口电路。 键盘控制器软复位/通电测试。
查主板中的键盘控制部分的电路。 可编程间隔计时器的测试正在进行或失灵。
查主板中与 定时器相关的电路。05 如果不断重复制造测试1至5,可获得8042控制状态。
查主板中键盘控制电路。 已确定软复位/通电;即将启动ROM.。
查主板ROM芯片及其支持电路。 DMA初始页面寄存器读/写准备正在进行或失灵。
查主板中与DMA有关的芯片及其外围电路。06 使电路片作初始准备,停用视频、奇偶性、DMA电路片,以及清除DMA电路片,所有页面寄存器和CMOS寄存器的工作。
查主板中与DMA相关的电路。 已启动ROM计算ROM BIOS 检查总和,以及检查键盘缓冲器是否清除。
查主板RCM芯片及其支持电路。 DMA初始页面寄存器读/写测试正在进行或失灵。
查主板中与DMA有关芯片及其外围电路。07 处理器测试2,核实CPU寄存器的工作。
查CPU是否插好,或CPU坏,或CPU跳线等设置有错否。 ROM BIOS检查总和正常,键盘缓冲器已清除,向键盘发出BAT(基本保证测试)命令。
查主板中键盘接口电路或试更换键盘。 08 使CMOS计时器作初始准备,正常地更新计时器的循环。
查主板中CMOS电路及芯片。 已向键盘发出BAT命令,即将写入BAT命令。
查主板键盘控制电路及键盘本身 RAM更新检验正在进行或失灵。查主板的内存接口电路及内存槽和内存条。
代码 Award AMI Phoenix/Tandy300009 EPROM检查总和且必须等于零才通过。查主板的BIOS电路及芯片。
核实键盘的基本保证测试,接着核实键盘命令字节。查主板的键盘插座及试换键盘。
第一个64K RAM测试正在进行。查找方法同上。
0A 使视频接口作初始准备。查与显卡有关的电路。
发出键盘命令字节代码,即将写入命令字节数据。试换键盘。
第一个64K RAM芯片或数据线失灵,移位。同上。
0B 测试8254芯片的DMA通道0。查主板中键盘控制电路及键盘中的控制电路。
写入键盘控制器命令字节,即将发出引脚23和24的封锁/解锁命令。查键盘控制器电路。
第一个64K RAM的奇/偶逻辑失灵。同上。
0C 测试8254通道1。查键盘中的控制电路。
键盘控制器引脚23,24已屏蔽/解锁;已发出NOP命令。试换键盘。
第一个64K RAM的地址线故障。同上。
0D 1、检查CPU速度是否与系统时钟匹配。查CPU跳级及CMOS中关于CPU参数的设置。
2、检查控制芯片已编程值是否符合初设置。3、视频通道测试,如果失败,则鸣喇叭。
已处理NOP命令;接着测试CMOS停开寄存器。查主板中控制CMOS的相关电路。
第一个64K RAM的寄偶性失灵。同上。
0E 测试CMOS停机字节。查主板中CMOS芯片及电路。
CMOS状态寄存器读/写测试;将计算CMOS检查总和。查主板CMOS芯片及其支持电路和主板电池。
初始化输入输出端口地址。查主板中与I/O相关的芯片及其外围电路,并注意插入的扩展卡等外部设备的I/O地址是否有冲突。
代码 Award AMI Phoenix/Tandy30000F 测试扩展的CMOS。 已计算CMOS检查总和写入诊断字节;CMOS开始初始准备。
查主板电池及CMOS芯片。 10 测试DMA通道0。
查主板中DMA芯片及电路。 CMOS已作初始准备,CMOS状态寄存器即将为日期和时间作初始准备。
查主板中CMOS控制电路。 第一个64K RAM第0位故障。
查主板中内存管理电路及内存槽有否生锈?有杂物否?内存条坏否?11 测试DMA通道1。查主板中DMA芯片及该芯片周边电路。
CMOS状态寄存器已作初始准备,即将停用DMA和中断控制器。查主板中与DMA和中断控制器有关芯片及其外围电路。
第一个64K RAM第1位故障。同代码10。
12 测试DMA页面寄存器。查主板中DMA芯片及该芯片的周边电路。
停用DMA控制器1以及中断控制器1和2;即将视频显示器并使端口B作初始准备。
5.JUnit代码测试是什么
JUnit是Java进行单元测试的一个框架, 需要下载junit, 3.8版本和后来的4.0以后版本编写测试的方法略有不同,
在3.8.2中需要导入junit.framework.中的类, 进行测试的类必须继承自TestCase类, 测试方法名称中需要含test字样, 可以在setup和teardown函数中管理一些每个测试函数都需要的资源比如数据库连接等,在测试函数中使用assert开头的函数来进行测试代码开发.以下是从junit文档中摘出的范例:
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class SimpleTest extends TestCase {
protected int fValue1;
protected int fValue2;
protected void setUp() {
fValue1= 2;
fValue2= 3;
}
public static Test suite() {
return new TestSuite(SimpleTest.class);
}
public void testAdd() {
double result= fValue1 + fValue2;
// forced failure result == 5
assertTrue(result == 6);
}
public void testDivideByZero() {
int zero= 0;
int result= 8/zero;
result++; // avoid warning for not using result
}
public void testEquals() {
assertEquals(12, 12);
assertEquals(12L, 12L);
assertEquals(new Long(12), new Long(12));
assertEquals("Size", 12, 13);
assertEquals("Capacity", 12.0, 11.99, 0.0);
}
public static void main (String[] args) {
junit.textui.TestRunner.run(suite());
}
}
在4.0.2中的变化是:
测试需要@org.junit.Test的Annotation标记,其他部分也使用了Annotation标记,setup和teardown使用@org.junit.Before 和@org.junit.After, 在eclipse3.1的环境中不支持4.0.2, 可以使用junit 4.0.2中提供的adapter类来帮助eclipse内置的junit发现新版本的测试函数