2013-07-04 40 views
0

我遇到與Roboguice和JUNIT相關的問題。其實我做的一個非常小的測試,使其運行,代碼:JUnit中的Roboguice.setBaseApplicationInjector中的NullPointerException測試

import junit.framework.Assert; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.mockito.Mock; 
import org.mockito.MockitoAnnotations; 
import roboguice.RoboGuice; 
import android.app.Application; 
import android.content.Context; 

public class FansworldClientTest { 
    TaskClient client; 
    @Mock 
    Application application; 
    @Mock 
    Context context; 

    @Before 
    public void setup() { 
     MockitoAnnotations.initMocks(this); 
     client = RoboGuice.getInjector(application).getInstance(TaskClient.class); 
    } 
    @Test 
    public void getTimestampTest() { 
     Assert.assertNotNull(application); 
     Assert.assertNotNull(context); 
     Assert.assertNotNull(client); 
    } 
    @After 
    public void teardown() { 
     RoboGuice.util.reset(); 
    } 
} 

而且MVN測試命令拋出我:

顯示java.lang.NullPointerException:空 在roboguice.RoboGuice。 setBaseApplicationInjector(RoboGuice.java:116) 在roboguice.RoboGuice.getBaseApplicationInjector(RoboGuice.java:59) 在com.app.api.client.TaskClientTest.setup(TaskClientTest.java:38)

我正在使用Roboguice 2.0,Junit 4.8.2和Mockito 1.9.5。我也在嘗試這樣做:

MockitoAnnotations.initMocks(this); 
RoboGuice.setBaseApplicationInjector(application, RoboGuice.DEFAULT_STAGE); 
RoboGuice.getInjector(application).getInstance(FansworldClient.class); 

而且結果相同。這是來自官方Roboguice項目的同一Astroboy2Test.class。

謝謝!

回答

1

您不能將模擬與Roboguice結合使用,最好讓Robolectric在此處提供您所需的上下文。

有一個很好的教程如何從莫里茨郵政設立這一切:

http://eclipsesource.com/blogs/2012/09/25/advanced-android-testing-with-roboguice-and-robolectric/

在此基礎上我貼了一篇文章前一陣子如何使用,甚至嘲笑的功能測試:

http://www.thomaskeller.biz/blog/2012/10/18/runtime-replace-implementations-with-roboguice-in-functional-tests/

+0

那麼,我可以使用Roboguice與Robolectric沒有Mockito或任何其他模擬庫? –

+0

當然,只是一個嘲諷的庫相對簡化了定製模擬的創建,因爲您必須編寫較少的樣板代碼,並且可以使用Mockito的流暢API進行存根。 –

+0

那麼,現在我面臨這個錯誤: https://github.com/robolectric/RobolectricSample/issues/10 –