Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Patterns.EMAIL\u地址返回空值_Android_Unit Testing_Junit - Fatal编程技术网

Android Patterns.EMAIL\u地址返回空值

Android Patterns.EMAIL\u地址返回空值,android,unit-testing,junit,Android,Unit Testing,Junit,this.emailPattern=Patterns.EMAIL\u地址;这是在MockitoJUniteTClass中创建空指针对象。但是,当我在“活动”上运行此操作时,它会正确初始化。我对您的测试有点困惑: 您正在模拟LoginActivity.class,但没有设置任何与之相关的内容。我相信您想要做一些类似于loginActivity=mock(loginActivity.class)的事情取而代之 另外,您正在模拟而不是监视该类,因此它不会访问实际方法来验证该方法的流。换句话说,你的测试

this.emailPattern=Patterns.EMAIL\u地址;这是在MockitoJUniteTClass中创建空指针对象。但是,当我在“活动”上运行此操作时,它会正确初始化。

我对您的测试有点困惑:

您正在模拟LoginActivity.class,但没有设置任何与之相关的内容。我相信您想要做一些类似于
loginActivity=mock(loginActivity.class)的事情取而代之

另外,您正在模拟而不是监视该类,因此它不会访问实际方法来验证该方法的流。换句话说,你的测试实际上什么都没做

最后,这个
emailPattern
从未在您的测试中使用过(可能在您的代码中使用过),所以我相信您想要模拟它(我假设它)。我建议您这样做:

@RunWith(MockitoJUnitRunner.Silent.class)
    public class LoginActivityTest {

        @InjectMocks
        LoginActivity loginActivity;

        private Pattern emailPattern;

        @Before
        public void createLogin(){
            this.emailPattern = Patterns.EMAIL_ADDRESS;
        }

        @Test
        public void checkValidation(){
            mock(LoginActivity.class);
            UserVO userVO = new UserVO();
            userVO.setEmailID("invalid");
            userVO.setPassword("a");

            boolean b = loginActivity.validatesFields(userVO);

            assertFalse(b);

        }
    }
我在这里所做的只是一个单元测试的例子,它验证
validateFields()
正在做什么。我假设在这个方法中有一个方法,我称之为otherStuff,它调用一个返回
Patterns.EMAIL\u ADDRESS
的方法,这就是你想要模拟的


如果您在这里插入更精确的
LoginActivity
代码会更好,但我希望我能帮助您。

我遇到了类似的问题,因为这只是一个简单的测试,但当我添加
@RunWith(AndroidJUnit4::class)
时,问题得到了解决。检查这是否是必须使用Android资源运行的测试。

如果示例中有
LoginActivity
代码,那就太好了。如果我们使用robolectric库,我们不会得到空值。据我所知,robolectric是一种用于UI等内容的单元测试API,不是吗?无论如何,此时您的运行程序是mockito,如果您模拟某些内容,则不会进入真正的方法逻辑。由于mockito运行程序,我得到的Patterns.EMAIL\u地址为null。因为不要创建用于调用类的子类的模拟。为此,我们需要机器人技术
@RunWith(MockitoJUnitRunner.Silent.class)
public class LoginActivityTest {

    @Spy
    @InjectMocks
    private LoginActivity loginActivity;

    @Mock
    private OtherStuff otherStuff;

    @Test
    public void checkValidation(){
        UserVO userVO = new UserVO();
        userVO.setEmailID("invalid");
        userVO.setPassword("a");

        doReturn(Patterns.EMAIL_ADDRESS).when(otherStuff).doStuff();

        boolean result = loginActivity.validatesFields(userVO);

        assertFalse(result);
    }
}