7

这是我的活动片段:

public class Search extends Activity
{
    private String TAG = "SEARCH";

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        Log.d(TAG, "About to call initialastion");
   //        new InitialisationTask(this).execute();
    }
}

有了上面的注释,我可以愉快地创建和执行单元测试,如下所示:

@RunWith(RobolectricTestRunner.class)
public class SearchTest {
    private Search searchActivity;
    private Button searchButton;
    private Button clearButton;
    private Button loginButton;
    private Button registerButton;
    private EditText searchEditText;

    @Before
    public void setUp() throws Exception {
        searchActivity = new Search();
        searchActivity.onCreate(null);

        searchButton = (Button) searchActivity.findViewById(R.id.btnPlateSearch);
        clearButton = (Button) searchActivity.findViewById(R.id.btnClearSearch);
        loginButton = (Button) searchActivity.findViewById(R.id.btnLogin);
        registerButton = (Button) searchActivity.findViewById(R.id.btnRegister);
        searchEditText = (EditText) searchActivity.findViewById(R.id.editTextInputPlate);
    }


    @Test
    public void assertSearchButtonHasCorrectLabel()
    {
        assertThat((String) searchButton.getText(), equalTo("Search"));
    }
}

但是,如果我new InitialisationTask(this).execute();在我的活动中取消注释该行,我的测试开始失败,很可能是因为对this.

模拟上下文的最佳方法是什么?

我试图添加contextMock = mock(Context.class);到我的setUp()但是我不确定如何将这个模拟设置为“进入”searchActivity

谢谢

4

3 回答 3

12

对于 robolectric 3.0,要获取 Context 对象,您只需使用:

RuntimeEnvironment.application.getApplicationContext();

在上面的代码中,您不必显式创建活动对象并调用它的 onCreate() 方法。Robolectric 可以使用以下方式为您设置活动:

searchActivity = Robolectric.setupActivity(SearchTest.class);
于 2015-07-22T14:38:13.497 回答
4

要获取 Activity 或 Application 的上下文,您可以使用:

Robolectric.getShadowApplication().getApplicationContext();

例如 :

Context context = Robolectric.getShadowApplication().getApplicationContext();

现在使用上下文变量。

于 2014-01-03T10:42:51.307 回答
3

我正在使用 Robolectric 3.2。这是我使用的:

ShadowApplication.getInstance().getApplicationContext();

于 2016-07-17T03:06:58.357 回答