这是我活动的片段:
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
由于
答案 0 :(得分:12)
对于robolectric 3.0,要获取Context对象,只需使用:
RuntimeEnvironment.application.getApplicationContext();
在上面的代码中,您不必显式创建活动对象并将其称为onCreate()方法。 Robolectric可以使用以下方式为您设置活动:
searchActivity = Robolectric.setupActivity(SearchTest.class);
答案 1 :(得分:4)
要获取活动或应用程序的上下文,您可以使用:
Robolectric.getShadowApplication().getApplicationContext();
例如:
Context context = Robolectric.getShadowApplication().getApplicationContext();
现在使用上下文变量。
答案 2 :(得分:3)
我正在使用Robolectric 3.2。这是我用过的:
ShadowApplication.getInstance().getApplicationContext();