2016-10-21 48 views
2

我有一個類UiUtils與方法,如:測試的EditText的getText方法

public static String getEditTextValue(final EditText editText) { 
    if(editText == null) return null; 
    final Editable text = editText.getText(); 
    if(text == null) return null; 
    return text.toString(); 
} 

然後我想單元測試添加到該類。我正在創建一個簡單的單元測試,但這是失敗的。我做的是:

@RunWith(MockitoJUnitRunner.class) 
public class UiUtilsTest { 
    @Mock 
    EditText editText; 

    @Test 
    public void getEditTextValue_ReturnsValueString() { 
     final String value = "text"; 
     editText.setText(value); 
     Assert.assertEquals(value, UiUtils.getEditTextValue(editText)); 
    } 
} 

正如你可以看到我創建一個嘲笑EditText然後我setText,並期望得到相同的值。但由於某種原因,editText.getText()方法總是返回null。這裏發生了什麼?我錯過了什麼?

+0

使用'Espresso'測試'UI'。 'getText'永遠不會返回null – Blackbelt

+0

我怎樣才能用濃咖啡創建測試?這是一個靜態方法,所以我不測試一個活動或片段,所以,我如何創建一個帶有espresso的edittext來做這個測試? – FVod

回答

0

試試這個:

@RunWith(MockitoJUnitRunner.class) 
public class UiUtilsTest { 
    @Mock 
    EditText editText; 

    @Test 
    public void getEditTextValue_ReturnsValueString() { 
     final String value = "text"; 
     Mockito.doCallRealMethod().when(editText).setText(value); 
     Mockito.doCallRealMethod().when(editText).getText(); 
     editText.setText(value); 
     Assert.assertEquals(value, UiUtils.getEditTextValue(editText)); 
    } 
} 
+0

謝謝,不幸的是這不工作:( – FVod

+0

你正在得到什麼錯誤 – Charu

+0

當做editText.setText我得到一個異常:java.lang.RuntimeException:方法setText在android.widget.TextView沒有模擬。請參閱http: //g.co/androidstudio/not-mocked有關詳細信息 – FVod

0

嘿,我也陷入了同樣的問題,請試試這個:

@Before 
public void init() { 
    MockitoAnnotations.initMocks(this); 

    when(rootView.findViewById(R.id.button_logout)).thenReturn(buttonLogout); 
    when(rootView.findViewById(R.id.button_unlock)).thenReturn(buttonUnlock); 
    when(rootView.findViewById(R.id.ScreenLock_PasswordTextField)).thenReturn(passwordField); 

    when(passwordField.getText()).thenReturn(Editable.Factory.getInstance().newEditable("asd")); 
    when(application.getPassword()).thenReturn("asd"); 

    sut = new ScreenLockPresenterImpl(application, rootView, screenLockListener, 
      logoutButtonClickListener); 
} 


@Test 
public void testOnClickWhenOk() { 
    sut.onClick(null); 

    verify(passwordField).getText(); 
    verify(screenLockListener).unLock(); 
} 

我認爲這是你在找什麼: 時(passwordField 。.getText())thenReturn(Editable.Factory.getInstance()newEditable( 「ASD」))。