我有一个测试类,我正在运行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的教程,但我仍然收到此错误,我不明白为什么。这是我试图解决这个问题的最后手段。
您正在以正确的方式进行测试,只需替换
PowerMockito.when(Uri.parse(anyString())).thenReturn(otherUri);
与莫基托何时
Mockito.when(Uri.parse(anyString())).thenReturn(otherUri);
并将此文件https://gist.github.com/badr-ghazouan/1edbed170ce968ef0011f2721911ffc6
添加到测试文件夹下的资源文件夹中,Mockito将自动加载它而无需执行任何操作。
希望这对你有用