天天看點

junit測試——其實能提高代碼效率和品質

多數情況下我在代碼裡面會在一些容易出錯的地方加入Log.i等列印日志的語句,這樣可以直接在運作後清楚地看到一些無法在界面上看到的中間資料的結果,但這樣往往十分局限,和調試一樣一次隻能測試一條資料。是以有時寫測試代碼顯得很有必要,不要覺得這是QA做的而不願去寫,你在給自己找茬的時候思維往往更活躍,如果是在你思路不是很清晰請就寫測試代碼,那麼你将能繞過許多坑,是你自己的編碼思路更加清晰,這樣效率自然提高了。而且有時候我們會需要靜下來一陣讓大腦休息休息,這段時間就可以用來跑測試代碼了。我們隻需要做單元測試就夠了,太複雜的反而容易讓人感到煩躁,另外測試的資料是可以複雜粘貼的,作為一名程式員要學會懶,懶是我們的基本素養,能複用的就複用。下面這個類中junit.textui.TestRunner.run(new TestSuite(TempTester.class))可以測試TempTester這個類所有以test開頭的函數,另外每次測試都會先執行setUp()方法,然後是測試代碼,最後是tearDown()方法,也就是将每個測試都區分開,setUp方法中就可以用來讀測試資料文本了。

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import java.io.File;
import java.io.FileOutputStream;

/**
 * Created by ShareLone on 2017/10/12.
 */

public class TempTester extends TestCase{
    public TempTester(String name){
        super(name);
    }
    public static void main(String[] args){
//        junit.textui.TestRunner.run(suite());
        junit.textui.TestRunner.run(new TestSuite(TempTester.class));   //所有以test起頭的函數都會作測試用例被添加
    }
//    public static Test suite(){
//        TestSuite suite = new TestSuite();
//        suite.addTest(new TempTester("testWhat"));
//        return suite;
//    }

    public void testWhat() {
        int sum = 0;
        int a = 1;
        int b = 2;
        sum = a + b;
        assertEquals("testWhat", 1, sum);
    }

    public void testWho(){
        String who = "ShareLone";
        assertEquals("testWho", "Solone", who);
    }

    FileOutputStream testStream;
    @Override
    protected void setUp() throws Exception {
        //File testFile = new File("text.txt");
        //testStream = new FileOutputStream(testFile);
    }

    @Override
    protected void tearDown() throws Exception {
        //testStream.close();
    }
}
      
在正式測試前線放入錯誤的測試資料,確定你的測試代碼是可以測出錯誤的,上面我這樣寫顯得很沒有必要是因為這測試的太簡單了,看都能看出來,但具體到複雜的情況就顯      
得很有必要了。      
下面測試代碼的運作結果      
"E:\DEVELOP SOFTWARE\android Studio\jre\bin\java" -Didea.launcher.port=7540 "-Didea.launcher.bin.path=E:\DEVELOP SOFTWARE\android Studio\bin" -Didea.junit.sm_runner -Dfile.encoding=UTF-8 -classpath "E:\DEVELOP SOFTWARE\android Studio\lib\idea_rt.jar;E:\DEVELOP SOFTWARE\android Studio\plugins\junit\lib\junit-rt.jar;E:\AndroidHelper\SDK\platforms\android-25\data\res;F:\develop place\for android\DGSRCMGSYS2\app\build\intermediates\classes\test\GooglePlay\debug;F:\develop place\for android\DGSRCMGSYS2\app\build\intermediates\classes\GooglePlay\debug;F:\develop place\for android\DGSRCMGSYS2\app\libs\nineoldandroids-2.4.0.jar;C:\Users\DELL\.gradle\caches\modules-2\files-2.1\com.google.code.gson\gson\2.6.2\f1bc476cc167b18e66c297df599b2377131a8947\gson-2.6.2.jar;F:\develop place\for android\DGSRCMGSYS2\app\libs\volley.jar;F:\develop place\for android\DGSRCMGSYS2\app\libs\jpush-android-3.0.8.jar;C:\Users\DELL\.android\build-cache\2ab0dee61601cebf5fcf2ffa907897957fd1630e\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\2ab0dee61601cebf5fcf2ffa907897957fd1630e\output\res;F:\develop place\for android\DGSRCMGSYS2\app\libs\commons-net-3.3.jar;F:\develop place\for android\DGSRCMGSYS2\app\libs\BaiduLBS_Android.jar;C:\Users\DELL\.android\build-cache\056da9de2fa64ad050d02711c7812926e7b0e1d3\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\056da9de2fa64ad050d02711c7812926e7b0e1d3\output\res;C:\Users\DELL\.android\build-cache\236b093f726d4cda201c5367a8eac35280015261\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\236b093f726d4cda201c5367a8eac35280015261\output\res;F:\develop place\for android\DGSRCMGSYS2\app\libs\ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar;C:\Users\DELL\.android\build-cache\9c05b71d5c1af8bc8da0d1308bd92547765e869c\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\9c05b71d5c1af8bc8da0d1308bd92547765e869c\output\res;C:\Users\DELL\.android\build-cache\e7fa9f42e6fc98991ae198fc38f2e5589cc9636c\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\e7fa9f42e6fc98991ae198fc38f2e5589cc9636c\output\res;C:\Users\DELL\.android\build-cache\88c49e8bfa735e92b1456d6663cb6a2a8d0531d5\output\res;C:\Users\DELL\.android\build-cache\88c49e8bfa735e92b1456d6663cb6a2a8d0531d5\output\jars\classes.jar;C:\Users\DELL\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest-core\1.3\42a25dc3219429f0e5d060061f71acb49bf010a0\hamcrest-core-1.3.jar;F:\develop place\for android\DGSRCMGSYS2\app\libs\jcore-android-1.1.6.jar;C:\Users\DELL\.android\build-cache\f52cbb59a5b07893dda650cf3b73bd20fc675182\output\res;C:\Users\DELL\.android\build-cache\f52cbb59a5b07893dda650cf3b73bd20fc675182\output\jars\classes.jar;C:\Users\DELL\.gradle\caches\modules-2\files-2.1\junit\junit\4.12\2973d150c0dc1fefe998f834810d68f278ea58ec\junit-4.12.jar;E:\AndroidHelper\SDK\extras\android\m2repository\com\android\support\support-annotations\25.3.1\support-annotations-25.3.1.jar;C:\Users\DELL\.android\build-cache\ab40685e30868d5d74fa3c3424409ff6a87b9f2c\output\res;C:\Users\DELL\.android\build-cache\ab40685e30868d5d74fa3c3424409ff6a87b9f2c\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\44fccb449e310e428f19bdb683ea3467bfb157f3\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\44fccb449e310e428f19bdb683ea3467bfb157f3\output\res;C:\Users\DELL\.android\build-cache\61bd77e2d50ca59aec7116270d906aabc1ad3eb6\output\res;C:\Users\DELL\.android\build-cache\61bd77e2d50ca59aec7116270d906aabc1ad3eb6\output\jars\classes.jar;C:\Users\DELL\.android\build-cache\b3c2c9249309b1a670e6329c9afadd245bba111f\output\res;C:\Users\DELL\.android\build-cache\b3c2c9249309b1a670e6329c9afadd245bba111f\output\jars\classes.jar;C:\Users\DELL\.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife-annotations\8.0.0\67e564dac5d137ba17cbb464ce66e2bd026ee532\butterknife-annotations-8.0.0.jar;F:\develop place\for android\DGSRCMGSYS2\app\build\intermediates\sourceFolderJavaResources\test\GooglePlay\debug;F:\develop place\for android\DGSRCMGSYS2\app\build\intermediates\sourceFolderJavaResources\GooglePlay\debug;F:\develop place\for android\DGSRCMGSYS2\build\generated\mockable-android-25.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.dgsrcmgsys.ui.TempTester


junit.framework.ComparisonFailure: testWho
Expected :Solone
Actual   :ShareLone
  <Click to see difference>

       
...中間省略幾十行      
junit.framework.AssertionFailedError: testWhat  Expected :1 Actual   :3   <Click to see difference> ...中間省略幾十行 Process finished with exit code -1