扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
测试代码把项目细分成模块来检查独立的功能,避免项目整合的时候出现BUG而很难排错,初学java在小程序里是体会不到测试的重要性,因为小程序几乎也不需要做测试,就算出错也是一目了然,很快就解决了,但是还要养成测试的习惯.在大型项目中如果没有测试用例,那将是非常可怕的.
在路北等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都做网站、网站设计 网站设计制作按需设计,公司网站建设,企业网站建设,品牌网站制作,网络营销推广,外贸网站建设,路北网站建设费用合理。
--------------------------DateUtil类
/**
* @author 王炳焱
* 创建日期:2007-5-21
* 项目名称:te
* 文件名称:DateUtil
*/
package test0521;
/**
* @author Administrator
*
*/
public class DateUtil {
public int year;// 用于表示年份
public int month;// 用于表示月份
public int day;// 用于表示天数
private boolean isLeapYear = false;// 用于表示是否为闰年.初始值为false
DateUtil() {
}
DateUtil(int year, int month) {// 用于初始化year变量和month变量
this.year = year;
this.month = month;
}
public boolean isLeapYear() {// 用于判断年份是否为闰年
this.isLeapYear = (this.year % 4 == 0 this.year % 100 != 0)
|| (this.year % 400 == 0);//闰年条件
return this.isLeapYear;
}
public int getMonthDays() {// 用于计算并取得该月的天数
int[] bigMonth = { 1, 3, 5, 7, 8, 10, 12 };//31天的月份
for (int i = 0; i bigMonth.length; i++) {
if (this.month == bigMonth[i]) {
this.day = 31;
return this.day;
}
}
if (this.month == 2 this.isLeapYear()) {//闰年2月
this.day = 29;
return this.day;
}
if (this.month == 2) {//平年2月
this.day = 28;
return this.day;
}
this.day = 30;//除去31天的月份和2月,其他月份都为30天
return this.day;
}
}
---------------Test类
/**
* @author 王炳焱
* 创建日期:2007-5-21
* 项目名称:te
* 文件名称:Test
*/
package test0521;
/**
* @author Administrator
*
*/
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
DateUtil dateUtil = new DateUtil(2008, 1);//输入年份与月份
String str = "平年";
if (dateUtil.isLeapYear()) {//根据判断闰年返回布尔值生成对应字符串
str = "闰年";
}
System.out.println(dateUtil.year + "年为"+str);
System.out.println(dateUtil.month + "月有" + dateUtil.getMonthDays()+ "天");
}
}
你这说的太笼统了,应该具体些。
有了Java代码之后
1、可以在代码中写些测试的方法,把你想要验证的东西,输出看一下。
2、可以用Debug的形式,跟踪代码执行,验证程序的逻辑是否正确。
3、利用JUnit写断言,测试结果
/**
*public boolean equals(String s) 重点测试
*public boolean contains(String s)
*public int indexOf (String str)
*public String substring(int startpoint)
*public String trim()
*public int length()
*public boolean startsWith(String s) endsWith()
* @author Administrator
*
*/
public class Demo1 {
public static void main(String[] args) {
/*public boolean equals(String s)用于比较字符串的值是否相等*/
String str1 = " Hello World! ";
String str2 = "你好!";
String str3 = " Hello World! ";
String str4 = "H";
boolean bo;
int index;
bo = str1.equals(str2)?true:false;//值相等返回true否则false
System.out.println(bo);
bo = str1.equals(str3)?true:false;
System.out.println(bo);
/*public boolean contains(String s)字符串的包含关系*/
bo = str1.contains(str2)?true:false;
System.out.println(bo);
bo = str1.contains(str4)?true:false;
System.out.println(bo);
/*public int indexOf (String str)获取指定字符串第一次出现的下标*/
index=str1.indexOf("H");
System.out.println(index);
/*public String substring(int startpoint)获取指定下标到结束的所有字符含指定下标的字符*/
String str5=str1.substring(4);
System.out.println(str5);
/*public String trim()去掉头尾空格但不能去掉中间的*/
System.out.println(str1.trim());
/*public int length()字符串长度*/
System.out.println(str1.length());
/*public boolean startsWith(String s) endsWith()判断是否以指定字符开头/结尾*/
bo=str1.startsWith(" ");//空格
System.out.println(bo);
bo=str1.endsWith("H");
System.out.println(bo);
}
}
首先String类java本来就提供 你莫非去重写方法?你觉得有必要?我们是搞应用的 比如你学一门语言 你只要说的流利就OK 人家才不关系你 对语法研究有多透彻 我写的 全是测试 不想写 类 你真想要还不如去找源码来看 更省事 人家都定义好了。
不说了直接上图 跟上面复制的一样
和内容一样!
一:创建一个测试类,建议将测试类单独放在一个包中(在 maven 项目里有测试类专门的存放位置),新建一个Junit Test Case类,下一步
测试类的命名建议是你将要测试的类名+Test,然后点 Browse, 你可以选择要进行测试的类(一般选择 Service, 因为 Service 关心的是业务需求),用这种方式创建可以自动生成要测试类的测试类,你只需要进行测试代码的书写.
@Test
public void testqueryById(){
} @Test
public void testQueryAll(){
} @Test
public void testReduceNumber(){
}123456789101112
如果里面有自动生成的代码,删除或注释即可…
二:配置 spring 和 junit 整合, junit 启动时加载 springIOC 容器,这里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunner.class) //告诉junitspring配置文件
@ContextConfiguration(locations = {"classpath:spring/spring-dao.xml"})123
同样的,在测试类中我们会调用 Service 的逻辑,由于我们使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一个 IService 接口(这里我直接对 DAO 进行测试了)
@Autowired
private SeckillDao seckillDao;12
接下来是测试逻辑,在编写测试代码之前建议覆盖实体中的 toString 方法,不然打印会很麻烦.
@Test public void testqueryById(){ long id = 1000;
Seckill seckill = seckillDao.queryById(id);
System.out.println(seckill.getSeckillName());
System.out.println(seckill);
} //JAVA没有保存形参的记录,如果你在 dao 中传了多个参数,那么需要声明它的形参对应的实参,否则 JVM 会显示找不到参数.声明方式稍后奉上
@Test public void testQueryAll(){
ListSeckill seckills = seckillDao.queryAll(0, 100); for(Seckill seckill:seckills){
System.out.println(seckill);
}
}
@Test public void testReduceNumber(){
Date killTime = new Date(); //对增加进行测试的时候,只要数据库增加了一条数据,我们就默认这个方法执行成功了
int updateCount = seckillDao.reduceNumber(1000L, killTime);
System.out.println("updateCount = "+updateCount);
}123456789101112131415161718192021222324
解决JAVA不保存形参的记录
int reduceNumber(@Param("seckillId")long seckillId,@Param("killTime")Date killTime);
Seckill queryById(long seckillId); /**
* mysql的分页查询
* @param offset 告诉它实际的形参
* @param limit
* @return
*/
ListSeckill queryAll(@Param("offset")int offset,@Param("limit")int limit);1234567891011
接下来我们根据他返回的结果和我们想要的结果对应就可以了. 测试类不用部署项目, 测试周期非常短, 而且可以进行专项测试. 测试类代码逻辑十分简单, 几乎不会出错. 如果结果不是预期的, 那么根据你的需求修改!
当然, 它的局限性也很打. 从单元测试不能看出页面传值的错误, 许多项目在服务器中的表现也不能模拟.
那么我们什么时候用junit呢?
当你的数据库操作非常复杂, 你不确定能输出你想要的值的时候, 相比用 debug 调试, 使用 Junit 是更方便的手段.或者新手出错概率非常大, 也不用在服务器中专门测试项目的表现, Junit 是个必备的工具!而且测试类的测试代码重用性很高.
如果你的数据和预期相悖, 那么修改业务逻辑; 否则, 查看页面是否有错! Junit在一定程度上减轻了我们业务代码调试的压力, 让我们关注于一点解决错误.
import java.sql.Timestamp;
import java.util.Date;
public class JavaMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Date date=new Date();
long ldate=date.getTime();
Timestamp tt=new Timestamp(ldate);
System.out.println(ldate);
System.out.println(tt);
char c='a';
char a='我';
System.out.println(a+1);
System.out.println(c+1);
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流