“昨晚”去参加了WPS的笔试,一共就三道题,现在回想下还是比较惭愧的。
1、如何判断两条直线的关系(重合、平行、香蕉、垂直)
一般的思路就是先分别取两条直线上的两个点,求出a1、b1、a2、b2然后再比较两个斜率是否相等,
If(a1 == a2){
If(b1 == b2)
直线重合
Else
直线平行
Else
If((a1*a2 + b1*b2)==1)
直线垂直
Else
直线相交
或者说使用向量来判断
=cos
然后判断值
If(等于0)
垂直
Else if(等于-1或1)
判断是平行还是重合
Else
相交
等我写到这里的时候,监考官居然发来了善意的提示,说这道题不能用求向量来做,不然就没意义了,你好好想想出题人的意思,,我真觉得伤,感觉这句话很多含义中。。。 于是这道题就被我毁了
回来后怎么找都没找的办法,真想去问下监考官或者出题人,这噶当到底怎么破才算的。
2、判断两个日期之间的天数
第一眼看到这题的时候,好开心呀,好熟悉是不是。提笔就写将两个date通过getTime()方法转化为long,然后相减再除以一天的毫秒数,就是了。写完后我发现了,我玩完了,这个时间长整形是1970年以来了,那之前的呢(⊙o⊙)。可笑的是回来后实际操作下,发现1997年之前的就是负数的long了,原算法生效,这就是没搞透彻搞仔细的的悲哀。
贴两种方法的代码
to = (new Date(1996, 1, 1)).getTime();
from = (new Date(1997, 1, 1)).getTime();
System.out.println((to - from) / (1000 * 60 * 60 * 24));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
to = df.parse("8-4-25").getTime();
from = df.parse("2008-1-20").getTime();
System.out.println((to - from) / (1000 * 60 * 60 * 24));
3、写其中一个方法的完整单元测试
大家都未料到呀,这是android开发笔试,没有一道android题目暂且不说(这可能意味着进去后会有一段时间的android培训,不太会也没关系似的),但看到这道题,欲哭无泪。虽然这么说,可我还是按自己的思路写了些,主要是写了一些测试用例,将单元测试分为功能测试和容错测试,然后设计了一些实际用例,
比如说:
功能测试用例包含有,判断大月天数、小月天数、平年天数、润年天数、润年二月天数、平年二月天数
容错测试用例包含有,年份为负、月份大于12、月份小于0、日期小于0、小月的日期大于30、日期大于31
然后设计一个测试函数,对每一个测试用例给出预期输出和实际输出
System.out.println(“预期输出为XXXX, 实际输出为”+function());
回来后想起来Junit测试框架,也就花了点时间研究下才是。
其实,我们平常使用的eclipse里面原本就已经集成了Junit框架的,右键new,other里面即可看到新建一个test case实例。具体来学习下吧
(一)Junit框架组成
JUnit 共有六个包,分别为junit.awtui、junit.extensions、junit.framework、junit.runner、junit.swingui、junit.textui
其中核心包是:
junit.framework包负责构建整个测试对象的框架
junit.runner负责驱动测试程序
经常使用的六个类或接口
Assert断言,当条件成立时assert方法保持沉默,不成立就抛出异常
Test运行Test并把结果传递给TestResult
TestListener监听测试中的事件(开始,结束,错误,失败)
TestCase测试类,每个testcase配有fixture(执行顺序是setup()、testxxx()、tearDown())
TestSuite运行一组test case(或者test suite),它是Test的组合,实现测试的自动化
TestResult测试中发生的所有错误或失败的展示,红的表示有错,绿的表示OK
TestRunner启动测试的用户界面,共三种显示测试结果的方式String、AWT、Swing
(二)Junit使用示例
/*************************待测试类**************************************/
public class DataFunc {
private int data1;
private int data2;
private int result;
public DataFunc() {
data1 = 0;
data2 = 0;
result = 0;
}
public DataFunc(int x, int y) {
data1 = x;
data2 = y;
}
public int add() {
result = data1 + data2;
return result;
}
public int substract() {
result = data1 - data2;
return result;
}
public int multiply() {
result = data1 * data2;
return result;
}
public int divide() {
result = data1 / data2;
return result;
}
}
/*************************测试类**************************************/
import junit.framework.TestCase;
public class DataFuncTestCase extends TestCase {
private DataFunc DF;
public DataFuncTestCase() {
super();
}
protected void setUp() {
DF = new DataFunc(30, 20); // Fixture
}
protected void tearDown() {
DF = null;
}
public void testadd() {
assertEquals(50, DF.add());
}
public void testsubstract() {
assertEquals(10, DF.substract());
}
public void testmultiply() {
assertEquals(600, DF.multiply());
}
public static void main(String[] args) {
// junit.textui.TestRunner.run(DataFuncTestCase.class);
// junit.awtui.TestRunner.run(DataFuncTestCase.class);
junit.swingui.TestRunner.run(DataFuncTestCase.class);
}
}
/*********************批量执行测试类(test case)****************************/
public class TestPart {
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new DataFuncTestCase1("test1"));
suite.addTest(new DataFuncTestCase2("test2"));
suite.addTest(new DataFuncTestCase3("test3"));
return suite;
}
public static void main(String[] args){
junit.textui.TestRunner.run(TestPart.suite());
//junit.awtui.TestRunner.run(TestPart.class);
//junit.swingui.TestRunner.run(TestPart.class) ;
}
}
/*********************批量执行测试类(test suit)****************************/
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTestSuite(DataFuncTestCase1.class);
suite.addTestSuite(DataFuncTestCase2.class);
suite.addTestSuite(DataFuncTestCase3.class);
return suite;
}
public static void main(String[] args) {
junit.textui.TestRunner.run(this.suite());
// junit.awtui.TestRunner.run(this.class);
//junit.swingui.TestRunner.run(this.class) ;
}
(三)Junit框架里使用了许多的设计模式,当然了,毕竟是大师的作品。在Junit框架的使用学习中,我发现很多的自动化测试需要使用到java的反射机制,于是又学了了下java反射机制,为此还有写了篇博客
(http://java--hhf.iteye.com/admin/blogs/2047906)
本文主要解释一下几个问题
1、如何根据对象获得类的所有方法和属性
2、如何根据类名获得类的方法和属性
3、如何选择被反射类的构造函数 并 调用该函数获得实例
4、如何批量执行无参函数
5、如何调用指定名字的方法
6、如何调用有参的函数
7、如何反射调用类的私有方