java.lang.NullPointerException Robolectric测试中的错误

时间:2013-12-19 09:46:45

标签: java android unit-testing maven robolectric

我试图在android上测试一种保存到内部存储器的方法,但是我的所有测试都是以"错误测试"当我使用Maven打包应用程序时,当我检查单个测试结果时,它表示课程中有java.lang.NullPointerException,从我读过的内容可能与context有关。我传入了但是我已经尝试了几种不同的方法来生成一个上下文,到目前为止还没有任何工作,任何关于如何使这些工作的建议都将受到高度赞赏。测试代码:

@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的代码(Didn' t最初有try catch,但我补充说试图让它工作):

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;
    }
}

2 个答案:

答案 0 :(得分:0)

如果你在类中使用通过依赖注入包含的成员,你应该提供一种方法来为这个上下文传入一个模拟的Object,因为它们只是在你的应用程序的运行时注入而不是在你的测试中。

对于一个好的模拟库,请查看Mockito

答案 1 :(得分:0)

愚蠢的错误,结果我没有正确初始化“routeList”列表。