Как мне протестировать этот класс пользовательского интерфейса, чтобы охватить код - PullRequest
1 голос
/ 22 мая 2019

Я создал пользовательский класс пользовательского интерфейса EzCustomEditTextEmail, расширив TextInputEditText, и написал тестовый класс (EmailUITest) для того же самого в пакете android (test). Я пытаюсь добиться покрытия кода для класса пользовательского интерфейса и использовал Mockito для того же. напишите сейчас, что я пытаюсь проверить строку setMaxLines(1) в методе inIt() класса EzCustomEditTextEmail и получить NullPointerException в 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 на constructor -> super(context)

...