一、在项目中加入Junit库
右击项目文件,在选项中选择BuildPath这一选项。
选择Add Libbraries选项,在其中找到Junit,可以自行选择需要的Junit版本。
当你的项目中除了之前的基础库文件,还出现了Junit库,说明已经添加完成了。
二、Junit代码的构建
@Testpublic void testSet(){Graph<String> current=emptyInstance();//测试错误输入负的权值assertEquals(-1,current.set("A", "B", -1));assertEquals(false,current.vertices().contains("A"));assertEquals(false,current.vertices().contains("B"));assertEquals(false,current.targets("A").containsKey("B"));//测试权值不为0,图中没有这两点也没有这条边的情况,返回值应该是零,并且两个点应该已经被插入到图中,这条边也已经被插入到图中assertEquals(0,current.set("A", "B", 1));assertEquals(true,current.vertices().contains("A"));assertEquals(true,current.vertices().contains("B"));assertEquals(true,current.targets("A").containsKey("B"));//测试权值不为零,图中已经存在这两点的情况,返回值应该是1(同时完成对先前加入的边的权值的查看)assertEquals(1,current.set("A", "B", 2));//测试权值为0,图中已经存在这两点的情况,返回值应该是2,并且这条边已经被删除assertEquals(2,current.set("A", "B", 0));assertEquals(false,current.targets("A").containsKey("B"));//测试权值不为零,图中有这两个点,但是没有这样的边的情况,返回值应该是0,并且这条边已经被添加assertEquals(0,current.set("A", "B", 2));assertEquals(true,current.targets("A").containsKey("B"));//测试权值为0,图中没有这两点也没有这条边的情况,返回值应该是0,但是同时没有对这两个点进行插入操作,也没有对这条边进行插入assertEquals(0,current.set("C", "D", 0));assertEquals(false,current.vertices().contains("C"));assertEquals(false,current.vertices().contains("D"));assertEquals(false,current.targets("C").containsKey("D"));}
以我之前对构建的图的类为例说明Junit代码的基本思路。
首先对于任何用于测试的函数,都需要加上@Test标签,否则Eclipse不会识别你的测试方法,运行时不会执行。
然后重点使用assertEquals函数,这个函数前一个参数是给定的正确结果,后一个参数是你要测试方法的返回结果。只有当两者相同,测试的结果才会是正确的。
正确的结果将被标注为绿色,红色代表有运行错误,蓝色代表assertEquals结果出现错误,可以进一步进行检查。
比如以下这个例子
这一测试出现蓝色,双击这一内容进行检查。
发现以下错误信息。
双击上面一行进一步对比结果。
可以看到详细的比较结果,然后返回查看代码的运行情况,进行debug。
3、使用注意
(1)当使用Junit时如果代码中包含有exit函数,测试程序会直接卡死,网上有一些处理方式,详细可以查看
https://blog.csdn.net/weixin_43872188/article/details/104781255
(2)如果函数没有返回值可以进行比较,可以在类中定义相关的观察者方法,比如重写toString函数,当成检查的方式。
(3)测试类也可以进行继承,并且子类如果没有重写父类中的测试函数,子类会自动执行父类的测试。
举例:
可以看到这一类中只写了三个测试方法。
运行后可以看到执行了一些其他函数,而这些函数恰恰就是父类中的测试函数。