我通过扩展 @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);
}
}