如何测试此自定义UI类以覆盖代码

时间:2019-05-22 06:14:50

标签: android unit-testing android-studio mockito expresso

我通过扩展 @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { Fragment selectedFragment = null; switch (menuItem.getItemId()){ case R.id.navigation_map: MapFragment mapFragment = new MapFragment(); mapFragment.show(getSupportFragmentManager(),"MapFragment"); break; case R.id.navigation_search: SearchFragment searchFragment = new SearchFragment(); searchFragment.show(getSupportFragmentManager(),"SearchFragment"); break; } return true; } }; 来制作了一个自定义UI类EzCustomEditTextEmail,并在android(test)包中编写了相同的测试类(TextInputEditText)。我正在尝试实现Custom UI类的代码覆盖,并使用Mockito进行相同的处理。现在,我要写的是验证EmailUITest类的setMaxLines(1)方法中的inIt()行,并在EzCustomEditTextEmail的{​​{1}}获取 NullPointerException {1}}

constructor

我的测试班

super(context)

我在import android.content.Context; import android.support.design.widget.TextInputEditText; import android.text.InputFilter; import android.text.InputType; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Patterns; import android.view.inputmethod.EditorInfo; public class EzCustomEditTextEmail extends TextInputEditText { public EzCustomEditTextEmail(Context context) { super(context); inIt(); } public EzCustomEditTextEmail(Context context, AttributeSet attrs) { super(context, attrs); inIt(); } public EzCustomEditTextEmail(Context context, AttributeSet attrs, int defStyleAttrs) { super(context, attrs, defStyleAttrs); inIt(); } private void inIt() { setMaxLines(1); setEditTextMaxLength(50); setImeOptions(EditorInfo.IME_ACTION_NEXT); setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); } public void setEditTextMaxLength(int length) { InputFilter[] filterArray = new InputFilter[1]; filterArray[0] = new InputFilter.LengthFilter(length); setFilters(filterArray); } public boolean isValidEmail() { return (!TextUtils.isEmpty(getText()) && !TextUtils.isEmpty(getText().toString().trim()) && Patterns.EMAIL_ADDRESS.matcher(getText().toString().trim()).matches()); } @Override protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { if (text.length() > 0) { if (!Patterns.EMAIL_ADDRESS.matcher(text).matches()) { requestFocus(); setError("Invalid Email"); } } else { setError(null); } } } -> import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class EmailUITest { @Mock EzCustomEditTextEmail ezCustomEditTextEmail; @Mock Context context; // Initializing Mockito and setup Pre-Test @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); ezCustomEditTextEmail = new EzCustomEditTextEmail(context); } // Test Method @Test public void callVerifyNumberAPI() throws InterruptedException { verify(ezCustomEditTextEmail, times(1)).setMaxLines(1); } }

处收到 NullPointerException

0 个答案:

没有答案