2013-01-15 50 views
0

我做了一個非常簡單的Android活動:TextWatcher方法和重寫EditText.onTextChanged()不叫一邊跑robolectric測試

public class SimpleActivity extends Activity { 

private EditText editText1; 
private EditText editText2; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LinearLayout verticalLayout = new LinearLayout(this); 
    verticalLayout.setOrientation(LinearLayout.VERTICAL); 
    editText1 = new EditText(this) { 
     @Override 
     protected void onTextChanged(CharSequence text, int start, 
       int lengthBefore, int lengthAfter) { 
      // TODO Auto-generated method stub 
      super.onTextChanged(text, start, lengthBefore, lengthAfter); 
     } 
    }; 
    editText1.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      System.out.println(s.toString()); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    editText1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
    verticalLayout.addView(editText1); 
    editText2 = new EditText(this); 
    editText2.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 
    verticalLayout.addView(editText2); 
    setContentView(verticalLayout); 
} 

public EditText getEditText1() { 
    return editText1; 
} 

public EditText getEditText2() { 
    return editText2; 
} 

} 

當我在我的Android設備上運行此代碼,都被覆蓋的的EditText .onTextChanged()方法&在組件被inited時調用TextWatcher.onTextChanged()方法。此外,他們正在正確調用,當我打電話方法editText1.setText(「文本」)

當我在Roboelectric測試運行創造SimpleActivity,它的創建& editText1/editText2不爲空,但EditText.onTextChanged()& TextWatcher .onTextChanged()在調用EditText.setText()時不調用組件初始值&如何使TextWatcher工作?這是我的應用&的一部分,它不能在沒有處理文本更改事件的情況下進行測試。

請幫助。

回答

0

使用Robolectric 1.1,我測試此代碼:

@RunWith(RobolectricTestRunner.class) 
public class TestSimpleActivity { 

    @Test 
    public void testMethod() { 
     SimpleActivity activity = new SimpleActivity(); 
     activity.onCreate(null); 
     activity.getEditText1().setText("hello world"); 
    } 

} 

我能看到TextWatcher.onTextChanged()火災,但沒有EditText.onTextChanged()。如果雙方都解僱了,這將是理想的,但看看https://github.com/pivotal/robolectric/blob/robolectric-1.1/src/main/java/com/xtremelabs/robolectric/shadows/ShadowTextView.java#L63。它看起來像TextWatcher會觸發,但onTextChange()不會爲子類實現。

如果您需要該功能,您必須在Robolectric中實現它。不幸的是,Robolectric在實施上存在差距。

+0

非常感謝。不理解,以前的影子類是什麼,現在看Robolectric代碼更貼近和理解。我剛剛使用了老版本的Robolectric,它根本沒有改變事件支持。 – 32kda