发表于: 2018-02-10 21:55:34

1 701


今日完成的事:

学习junit并写第一个单元测试:

去查了查资料发现要下junit 4,但是官网上发现了junit 5,下载完后发现。。。

junit command???

junit jupiter????

junit platform???

junit vintage????

what fuck?

好吧还是先学junit 4(手动滑稽)毕竟只有一个jar包,而上面提到的每项都有三个包。

测试方法使用一些断言语句来进行各种测试。

例如一个加法计算器类:


它的测试类为

测试类中,使用@Test标签的方法即为测试方法。

其中使用assertEquals断言来测试程序输出和期望值的比较结果。

还有其他断言,如非不空,真假判断,指向对象是否一样等。

下面学spring

2,学习Spring,配置Spring和Junit

spring有许多概念。例如面向方面编程或者依赖注入,但现在先构建一个简单的spring程序

一个典型的spring程序,spring程序的核心容器里有一个叫应用程序上下文,ApplicationContext就创建了这么一个东西,它使用一个名为beans的xml文件来构建上下文,当创建上下文后,使用它的getBeans()方法获得一个以实例对象类型为准的通用对象,当拿到这个对象后,就可以使用它来调用任何该类的方法,如HelloWorld类:

通过beans.xml文件,就可以在其中写入任何数据而不影响程序的源代码:

从中可以看出,这种方法把数据和逻辑业务层分开了。

3,编写单元测试的代码,注意,你也可以尝试一下,先写单元测试的代码,再写接口,再写实现类。

暂时没找到好的练习例子,就先从简单的例子下手:

尝试写出calculator的spring版:

首先写测试,我又加了个减法:

由于使用的是ApplicationContext容器,所以任何数据都由bean文件定义。在带入程序执行,由此看出,bean的作用应该是注入数据来实例化类,但是具体过程仍不清楚。

然后是接口,当然是测试使用的功能,sum方法和minus方法。

然后写实现类,跟前面差不多,加了个minus方法。

然后是main方法,因为是要测试,所以写一个JUnitCore来执行所有测试,如下:

一般测试结果。

一个疑问:这是什么意思?目前还没找到查看日志的办法,反正spring内容不少,一起解决。

收获:

1,测试不是条件判断。

我有一次试着使用测试来检测返回结果的合格性之类的判断,也就是利用断言,但是后面我发现首先:

测试方法是不能有参数变量的。也就是说,测试的数据都是人工输入而不是动态给予。这也就不能当成逻辑代码的一部分。所以测试的作用还是调试程序多一点?逻辑的话还是交给控制语句好了。

2,junit通过一些标签来控制执行顺序,如@before,@after,@test,@beforeclass等。一般顺序为,先beforeclass,再before,再test1,再after,再before,再test2,再after,以此类推。

2,junit提供了一些核心类来实现诸多方法,例如TestResult类,TestCase类,TestSuite类(当然还有Assert类也就是断言,这当然是必不可少的)。在简单的测试中是不需要的,但是在复杂测试中,例如套件测试等,就可以通过继承这些类来获得他们的方法,例如TestResult类,这个类可以区分错误与失败,并详细记录下错误与失败的内容和数量。通过使用addError,addFailure这些方法。它可以通过TestCase类的实例来启动多个测试,记录多个结果,当然我还没试过。

关于spring

spring的核心是DI(依赖注入),或者说,是IOC(反转控制),但ioc是一个概念,di则是他的具体实现,当一个类a依赖于另一个类b时,通过ioc来把b注入到a当中,例如构造函数,或者setter方法。这部分现在我已经接触了一些,ApplicationContext的使用是一个例子。当初始化Calculotor类实例时,calculator没有去管expression变量是怎么去控制和传入适当值的,当然它已经被默认初始化了,expression变量的传值是独立于Calculator类本身的,而且,expression反过来影响了Calculator类的初始化。所以,控制流就通过外部系统被反转了,而spring是这其中的控制人吗?还是某种顺序呢。

另一个核心是AOC(面向方面编程),这个可能在下一篇日报中再总结。

明天做的事:

把spring看完,再任务。




返回列表 返回列表
评论

    分享到