2013-12-19 31 views
-1

我想測試一個方法來保存到android的內部存儲器,但我所有的測試都是作爲「測試錯誤」,當我用Maven打包應用程序時,當我查看單獨的測試結果時,它說班級中有一個java.lang.NullPointerException,從我讀過的內容來看,它可能與我傳入的context有關,但我已經嘗試了幾種不同的方法來生成上下文,目前爲止沒有任何工作,任何有關如何讓這些工作的建議將不勝感激。用於測試的代碼:Robolectric測試中的java.lang.NullPointerException錯誤

@RunWith(RobolectricTestRunner.class) 
public class SaveSystemTest { 

SaveSystem testSS; 
Route testRoute; 
@Before 
public void setup() 
{ 
    testRoute = new Route(new LatLng(54.6279022,-5.9146021), new LatLng(54.6279022,-5.9146021),"testRoute"); 
    testSS = new SaveSystem("testSave",Robolectric.application.getApplicationContext()); 
} 

@org.junit.Test 
public void saveTest() 
{ 
    boolean b = testSS.save(testRoute); 
    assertTrue(b); 
} 

守則saveSystem.save(沒有原來有嘗試捕捉,但我補充說,試圖得到這個工作):

public boolean save(Route file) 
{ 
    routeList.add(file); 
    try 
    { 
     if(saveToMemory()) 
      return true; 
     else 
      return false; 
    }catch (Exception e) 
    { 
     Log.d("SaveSystem", "Exception: " + e); 
     return false; 
    } 
} 

代碼saveSystem .saveToMemory:

private boolean saveToMemory() 
{ 
    try 
    { 
     FileOutputStream fos = context.getApplicationContext().openFileOutput(saveFileName,Context.MODE_PRIVATE); 
     ObjectOutputStream os = new ObjectOutputStream(fos); 
     os.writeObject(routeList); 
     os.close(); 
     return true; 
    }catch (Exception e) 
    { 
     Log.d("SaveSystem", "Exception: " + e); 
     return false; 
    } 
} 
+1

您應該包含異常堆棧跟蹤並指定引發異常的代碼行。 –

+0

我對android開發比較陌生,如何使用maven獲取異常堆棧跟蹤? – awriis

+0

這取決於你的具體情況。如果您使用surefire插件,請查看'target/surefire-reports'目錄以獲取有關測試執行的詳細報告。 –

回答

0

愚蠢的錯誤,原來我沒有正確初始化「routeList」列表。

0

如果你使用你的類成員,它們通過依賴注入包括在內,你應該提供一種方法在此上下文的嘲笑對象傳遞,因爲它們只在注射RU ntime你的應用程序,而不是你的測試。

對於一個好的嘲諷圖書館,看看Mockito