Bu sorunla biraz uğraşıyordum ve sanırım Robolectric hakkında temel bir şey elde etmiyorum. Genellikle bazı Google aramaları, bu tür bir sorunun alt kısmına ulaşmamda yardımcı olabilir, ancak bu kodla örnek kodlara bakarak kullanımda hiçbir şey bulamıyorum.Robolectric, Liste öğelerini tıklatma ile ilgili sorunlar
Liste görünümü öğesine bir tıklama taklit etmeye çalışıyorum ve bir etkinliğin tıklamadan sonra başlatıldığını kontrol ediyorum. Test ettiğim mevcut etkinliğin sonuçta meydana gelen etkinlik olduğunu tekrar hatırlıyorum. Tüm liste öğesini tıklatıp kodu tıklatıp sonuçta oluşan etkinliği denetlemeyi denedim ve bu, test ettiğim InstallationListActivity olarak geri döndü. Bu yüzden liste görünümü öğesinin tıklanmadığı sonucuna vardım ve neden emin değilim. Aşağıdaki test kodunda kurduğum sistem kayıtları, olmasını beklediğim değerler. Liste 13 öğedir ve getChildAt (0) üstbilgiyi döndürür. İlk maddeyi (getChildAt (1)) almayı ve onun üzerinde performClick'i çağırmayı veya onun çocuk metin görünümünde beklenen etkinliğimi başlatmayı düşünürdüm ama bu durum böyle görünmüyor. İşte
@Before
public void setUp() {
mAppLaunch = new ApplicationLaunchActivity();
mAppLaunch.onCreate(null);
mActivity = new InstallationListActivity();
mActivity.onCreate(null);
}
@Test
public void shouldHaveNonEmptyInstallationList() throws Exception {
assert(mActivity.installationListCount() > 0);
}
@Test
public void shouldHaveSameNumberOfElements() throws Exception {
ListView installationListView = (ListView) mActivity.getListView();
ShadowListView shadowListView = shadowOf(installationListView);
assert(shadowListView.getChildCount() == mActivity.installationListCount());
}
@Test
public void pressingTheFirstItemInTheListShouldLaunchVenueListActivity() {
ListView installationListView = (ListView) mActivity.findViewById(android.R.id.list);
System.out.println("qty: " + installationListView.getChildCount());
System.out.println("class: " + installationListView.getChildAt(0).getClass());
System.out.println("class: " + installationListView.getChildAt(1).getClass());
System.out.println("class: " + installationListView.getChildAt(2).getClass());
System.out.println("class: " + installationListView.getChildAt(3).getClass());
System.out.println("class: " + installationListView.getChildAt(4).getClass());
LinearLayout firstItemLayout = (LinearLayout) installationListView.getChildAt(1);
TextView firstItem = (TextView) firstItemLayout.getChildAt(0);
ShadowTextView shadowFirstItem = shadowOf(firstItem);
ShadowLinearLayout shadowLayout = (ShadowLinearLayout) shadowOf(firstItemLayout);
shadowLayout.performClick();
shadowFirstItem.performClick();
clickOn(firstItem);
clickOn(firstItemLayout);
System.out.println("class: " + firstItemLayout.getChildAt(0).getClass());
System.out.println("Layout shadow" + shadowOf(firstItemLayout).getClass());
System.out.println("First Item Text: " + shadowFirstItem.getText());
ShadowActivity shadowActivity = shadowOf(mActivity);
Intent startedIntent = shadowActivity.getNextStartedActivity();
assertNotNull(startedIntent);
ShadowIntent shadowIntent = shadowOf(startedIntent);
assertThat(shadowIntent.getComponent().getClassName(), equalTo(VenueListActivity.class.getName()));
}
}
düzen ı liste görünümünü inşa etmek kullanıyorum geçerli:: Burada
This is list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:background="@drawable/background"/>
</LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView android:id="@+id/list_item_text"
style="@style/tw_list_font"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:minHeight="?android:attr/listPreferredItemHeight" />
</LinearLayout>
Ve liste başlatır kod edilir Neyse, işte ben kullanıyorum robolectric/test kodudur:
InstallationListActivity.java
setContentView(R.layout.list);
final ListView installationListView = getListView();
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header, installationListView, false);
TextView headerText = (TextView) header.findViewById(R.id.header_text);
headerText.setText("Installations On Live"); // TODO: This should not be hardcoded
installationListView.addHeaderView(header, null, false);
setListAdapter(new ArrayAdapter<Installation>(this, R.layout.list_item, R.id.list_item_text, mInstallations));
// Click event
installationListView.setClickable(true);
installationListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg1) {
Installation installationClicked = (Installation) installationListView.getItemAtPosition(position);
if (LOCAL_LOG) {
Log.d(LOG_TAG, "Installation: " + installationClicked.toString() + " clicked.");
Log.d(LOG_TAG, installationClicked.toString() + " has installationDirectory: " +
installationClicked.rootDir);
}
AppState.installation = installationClicked;
AppState.serverInstallationName = installationClicked.rootDir;
Intent venueListIntent = new Intent(InstallationListActivity.this, VenueListActivity.class);
startActivity(venueListIntent);
}
});
Herhangi bir yardım çok takdir edilmektedir! Teşekkürler bir ton!