2014-01-19 66 views
0

我開始學習有關的Mockito。我不知道如何嘲笑我的解析器,並使用現有文件,例如帶有雙數字的「data.txt」,但保存爲字符串(21.144 -12.98等)。更多我想檢查這些數字是不是字母或別的東西。我的解析器:嘲諷簡單解析與現有的文件,並檢查它

package model.utils; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.LinkedList; 
import java.util.Scanner; 

import model.data.HullPoint; 
import model.data.HullPointContainer; 

public class Parser { 
public static HullPointContainer parseFile(File file) throws FileNotFoundException 
{ 
    double a, b; 
    String da, db; 
    double minx = 0, miny = 0, maxx = 0, maxy = 0; 
    int k = 0; 
    LinkedList<HullPoint> list = new LinkedList<HullPoint>(); 
    try{ 
     Scanner scanner = new Scanner(file);  
     try { 
      while (scanner.hasNextLine()){ 
       String line = scanner.nextLine(); 
       Scanner lineScanner = new Scanner(line); 
       while (lineScanner.hasNext()){ 
        da = (lineScanner.next()); 
        db = (lineScanner.next()); 
        a = Double.parseDouble(da); 
        b = Double.parseDouble(db); 
        HullPoint point = new HullPoint(a,b); 
        list.add(point); 
        if(k == 0){ 
         minx = maxx = a; 
         miny = maxy = b; 
        } else { 
         if(a < minx) 
          minx = a; 
         if(a > maxx) 
          maxx = a; 
         if(b < miny) 
          miny = b; 
         if(b > maxy) 
          maxy = b; 
        } 
        k++; 
       } 
       lineScanner.close(); 
      } 
      int i = list.size();  
      System.out.println(i); 
      System.out.println("minX = " + minx +" and minY= " + miny); 
      System.out.println("maxX = " + maxx +" and maxY= " + maxy); 

      return new HullPointContainer(list, minx, miny, maxx, maxy); 
     } catch (Exception e) { 
      throw e; 
     } finally { 
      scanner.close(); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     throw(e); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw e; 
    } 
} 

}

+0

你正在測試解析器,所以它是CUT。你不應該嘲笑CUT,這會打敗測試它的目的。我會將'URI'作爲輸入而不是'File',並將測試用例存儲在測試類路徑中。然後你可以使用'ClassLoader'來找到它並傳入URI。 –

回答

0

爲了嘲笑你的解析器,你必須創建一個模擬對象

Parser mockedparser = Mockito.mock(Parser.class);

那麼你可以告訴的Mockito做什麼,如果parseFile方法被調用。例如:

Mockito,when(mockedparser.parseFile(myFile)).thenReturn(result);

parseFile方法被調用myFile作爲參數,模擬將返回result

您可以verify調用該方法HASS鴨舌:

Mockito.verify(mockedparser).parseFile(myFile);

如果已經調用once這種說法,檢查會通過,如果我t wasnt,檢查將失敗並帶有描述性錯誤消息

PS:嘲笑是simulating對象行爲,但沒有對象的實際實例。 恕我直言從你的問題你應該問如何Unit test你的解析器,而不是mocking