在单元测试

时间:2018-04-18 11:07:17

标签: android unit-testing nullpointerexception mockito libphonenumber

enter image description here我正在使用' michaelrocks.libphonenumber.android'格式化和验证电话号码。当我运行应用程序时它工作正常。

我写了两个测试,但是两个测试都因Null Pointer异常而失败。无法弄清楚为什么会有例外。

我在这里做了什么根本错误吗?您的建议非常感谢。

这是抛出空指针异常的方法。

 private static Phonenumber.PhoneNumber getPhoneNumberObj(final String phone, final String code, PhoneNumberUtil phoneNumberUtil){
        Phonenumber.PhoneNumber phoneNumberObj = null;
        try {
            String isoCode = phoneNumberUtil.getRegionCodeForCountryCode(Integer.parseInt(code));
            /**THIS IS WHERE THERE IS A NULL POINTER EXCEPTION**/
            phoneNumberObj = phoneNumberUtil.parse(phone, isoCode);         
        } catch (Exception e) {
            Log.e(TAG, "Phone parsing error", e);
        }
        return phoneNumberObj;
    }

这是完整的代码。

验证员类

导入和方法

import io.michaelrocks.libphonenumber.android.PhoneNumberUtil;
import io.michaelrocks.libphonenumber.android.Phonenumber;

public static boolean validatePhone(final String phone, final String code, Context context) {
        PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.createInstance(context);
        Phonenumber.PhoneNumber phoneNumber = null;
        try{
            phoneNumber = getPhoneNumberObj(phone, code, phoneNumberUtil);
        }
        catch (Exception e){
            Log.d(TAG, e.getMessage());
        }
        return phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber);
    }

    public static String getFormattedPhoneNumber(final String phone, final String code, Context context) {
        String formatedPhoneNumber = "";
        PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.createInstance(context);
        Phonenumber.PhoneNumber phoneNumber = null;
        try {
            phoneNumber = getPhoneNumberObj(phone, code, phoneNumberUtil);
            if(phoneNumber != null && phoneNumberUtil.isValidNumber(phoneNumber)){
                formatedPhoneNumber = phoneNumberUtil.format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164);
            }
        } catch (Exception e) {
            Log.e(TAG, "Phone parsing error", e);
        }
        return formatedPhoneNumber;
    }

    private static Phonenumber.PhoneNumber getPhoneNumberObj(final String phone, final String code, PhoneNumberUtil phoneNumberUtil){
        Phonenumber.PhoneNumber phoneNumberObj = null;
        try {
            String isoCode = phoneNumberUtil.getRegionCodeForCountryCode(Integer.parseInt(code));
            phoneNumberObj = phoneNumberUtil.parse(phone, isoCode);
        } catch (Exception e) {
            Log.e(TAG, "Phone parsing error", e);
        }
        return phoneNumberObj;
    }

我的单元测试

@RunWith(MockitoJUnitRunner.class)
public class ValidatorTest {

    @Mock
    Context mMockContext;

    private final String VALID_PHONE_NUMBER = "07455658798";
    private final String VALID_CODE = "+44";
    private final String VALID_FORMATTED_PHONE_NUMBER = "+447455658798";

    @Test
    public void validatePhone() throws Exception {
        assertThat(Validator.validatePhone(VALID_PHONE_NUMBER, VALID_CODE, mMockContext), is(true));
    }

    @Test
    public void getFormattedPhoneNumber() throws Exception {
        String result = Validator.getFormattedPhoneNumber(VALID_PHONE_NUMBER, VALID_CODE, mMockContext);
        assertThat(result, is(VALID_FORMATTED_PHONE_NUMBER));
    }
}

0 个答案:

没有答案
相关问题