Добавление @RunWith (PowerMockrunner.class) для тестирования дает все остальные тесты NPE - PullRequest
0 голосов
/ 07 июня 2019

У меня есть тестовый класс, где я запускаю тесты Mockito, например:

public class ViewModelTest {

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void openQuestion() {
        viewModel.openQuestion(context, QUESTION_ID);
        verify(questionRouter).open(context, QUESTION_ID);    //just an example
    }

}

Все работает как должно.Тем не менее, мне нужно смоделировать статический метод в одном из моих тестовых классов, поэтому я добавляю PowerMock в свой класс:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Uri.class)
public class ViewModelTest { ...

и зависимости:

testImplementation 'org.powermock:powermock-core:2.0.2'
testImplementation 'org.powermock:powermock-api-mockito2:2.0.2'
testImplementation 'org.powermock:powermock-module-junit4-rule-agent:2.0.2'
testImplementation 'org.powermock:powermock-module-junit4-rule:2.0.2'
testImplementation 'org.powermock:powermock-module-junit4:2.0.2'

Но когда я сейчас попробуючтобы выполнить тесты (скажем, у меня есть 15 методов тестирования), я получаю NPE для большинства методов тестирования:

java.lang.NullPointerException
at com.example.Viewmodel.prepare(StartViewModel.java:126)

Я получаю NPE даже в методе, в котором я пытаюсь смоделировать статический метод:

PowerMockito.mockStatic(Uri.class);
    PowerMockito.when(Uri.parse(anyString())).thenReturn(otherUri);

Прежде чем вы понизите голосование и проголосуете за закрытие NPE, я действительно просмотрел большинство ответов на SO и других сайтах, перепробовал многие из них, ни один из которых не работал для меня.Я следовал инструкциям для Powermock, но все еще получаю эти ошибки, и я не понимаю, почему.Это мое последнее средство, чтобы попытаться решить эту проблему.

1 Ответ

0 голосов
/ 17 июня 2019

вы делаете тест правильным образом, просто замените

PowerMockito.when(Uri.parse(anyString())).thenReturn(otherUri);

на Mockito

 Mockito.when(Uri.parse(anyString())).thenReturn(otherUri);

и добавьте этот файл https://gist.github.com/badr-ghazouan/1edbed170ce968ef0011f2721911ffc6 в тестируемую папку ресурсовпапка, mockito загрузит его автоматически, ничего не делая.

Надеюсь, это работает для вас

...