2016-04-12 6 views
1

Ich benutze Roboletric und ich möchte das onClick in das Element "viewHolder.cardView" testen.Roboletric - Test onClick in benutzerdefinierte Adapterelement

Dies ist meine Art Adapter (das hat zwei Elemente). Ich habe bereits meine Liste und meinen Adapter erstellt, aber wie kann ich das onClick-Ereignis mit roboletric testen?

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_TIME_FORMAT, Locale.getDefault()); 

    if (position < mMessageList.size()) { 

     ItemHolder viewHolder; 

     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()) 
         .inflate(R.layout.item_list, parent, false); 
      viewHolder = new ItemHolder(); 
      viewHolder.cardView = (RelativeLayout) convertView.findViewById(R.id.clickable_area); 

      viewHolder.txtDate = (TextView) convertView.findViewById(R.id.message_date); 

      convertView.setTag(viewHolder); 
      } else { 
       viewHolder = (ItemHolder) convertView.getTag(); 
      } 

      final ItemModel item = mMessageList.get(position); 

      if (item != null) { 
       viewHolder.id = item.getId(); 
       if (item.getTimestamp() != null){ 
          viewHolder.txtDate.setText(dateFormat.format(item.getTimestamp())); 
      } 

      viewHolder.cardView.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         addSelection(); 
        } 
       }); 

     viewHolder.cardView.setOnLongClickListener(new View.OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View view) { 
         return true; 
        } 
        }); 

        viewHolder.cardView.setSelected(item.isSelected()); 
       } 
      } 
      return convertView; 
     } 
    static class ItemHolder { 
      protected RelativeLayout cardView; 
      protected TextView txtDate; 
    } 

Antwort

0

Hier ist, was wir ähnlich tun:

SiteAdapter.ViewHolder viewHolder = adapter.onCreateViewHolder(viewGroup, -1); 
adapter.setSites(SITES); 
adapter.bindViewHolder(viewHolder, 0); 

viewHolder.rowLayout.performClick(); 

verify(busMock).send(selectedEventCaptor.capture()); 

assertThat(selectedEventCaptor.getValue().getSite()).isEqualTo(SITES.get(0)); 

wo:

@Captor 
private ArgumentCaptor<SiteSelectedEvent> selectedEventCaptor; 

@Mock 
private EventBus busMock; 

private static final List<Site> SITES = 
    Arrays.asList(new Site("1", "Test 1", new Links("one", "two")), 
       new Site("2", "Test 2", new Links("three", "four")));