JUnit简介
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。
JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
场景
假设,我们有一个Person类
- 包含两个方法say和sayHi
- 两个方法都接收一个String类型的参数
- say返回"Hello,"+arg
- sayHi返回"Hi,"+arg
代码如下:
package org.ivan;
public class Person {
public String say(String name) {
return "Hello," + name;
}
public String sayHi(String name) {
return "Hi," + name;
}
}
如何保证方法返回了正确的值?
当然,你可以使用main方法,代码如下:
public static void main(String[] args){
Person p = new Person();
System.out.println("test Person.say" + ("Hello,Ivan".equals(p.say("Ivan"))));
System.out.println("test Person.sayHi" + ("Hi,Ivan".equals(p.sayHi("Ivan"))));
}
《杠杆阅读术》
讲述读书的方法:
- 主要针对商业书籍
- 一天一本(非技术性很强的书,一天一本难度不大)
- 先阅读序言,目录以及结尾,确认图书编写目的,带着目的去读
- 不要一页一页读,吸收20%即可,没读完也没关系(强迫症患者比较有难度)
- 重要的是实践
对个人而言,一是不要纠结于细节(当然是针对非技术性书籍),不要强迫自己非要全部看完.
看一类书,如果多本书中都提到了类似的观点,则需要注意。
对书中的知识要进行实践。
《书都不会读,你还想成功》
和《杠杆阅读术》类似,如果读过上一本,此本可忽略!
概述
此为"刨根问底"系列文章的第二篇,接上篇,为什么Java接口中的成员变量被设计为必须是public static final的?
网络答案
在网络上搜索到了如下两篇还算靠谱的解答!
网络解答1
网络解答2
解释
上篇我们用反证法来证明了接口方法设为public为最合适选择!
这里我们依然可以使用反证法来解释!
假设接口中的成员变量不是public static final的!
先将属性设置为private的!
public interface Person{
private int num;
}
OK!private的属性,当然只能在接口内部使用了!但是在接口里面给谁使用呢?接口里的方法只有方法头可没方法体!所以设为private,那就永远都访问不到了!
好,那我们改成protected!
public interface Person{
protected int num;
}
这样子类就能访问了!但是外部如何访问呢?方法是有的:
概述
去年担任了公司Java培训班的培训讲师!由于时间关系,课堂上只是讲了How,而很少涉及到Why!
故计划编写此"刨根问底"系列文章,主要解释Java中的Why!
此为该系列文章的第一篇,为什么Java接口中的方法默认是public的?
解释
首先我们来看下接口的定义,在《Thinking in Java》中,对接口做了如下定义:
An interface says, "All classes that implement this particular interface will look like this." Thus, any code that uses a particular interface knows what methods might be called for that interface, and that’s all. So the interface is used to establish a "protocol" between classes. (Some object-oriented programming languages have a keyword called protocol to do the
same thing.)
接口意味着:"所有实现了这个特定接口的类都应该可以被当作这个接口来看待"。也就是说,所有使用此特定接口的代码都应该知道该接口有哪些方法可以被调用,而且仅此而已!所以接口被用来定义接口之间的协议!(有些语言使用protocol这个关键字来做Java中interface关键字所要做的事情,例如:Clojure)
简单说来,接口就是用来定义一个"协议"的!这么看来,protocol这个关键字应该比interface这个关键字更加的准确!
//Java接口定义
public interface Person{
void say();
}
//这样会不会更合理?
public protocol Person{
void say();
}
//Clojure类似代码
(defprotocol Person
(say [this]))
上面的接口就定义了一个"协议",这个协议就是:"所有遵循这个协议(实现此接口)的类,必然有一个叫做say()的方法"。