我正在尝试测试下一种方法:
public void methodToTest() {
// Other stuff
privateMethod(false).execute(new Void[0]);
}
称为PrivateMethod:
private AsyncTask<Void, Void, CustomObject> privateMethod(final boolean renew) {
AsyncTask<Void, Void, CustomObject> asyncTask = new AsyncTask<Void, Void, CustomObject>() {
@Override
protected CustomObject doInBackground(Void... params) {
CustomObject custom = new CustomObject();
return custom;
}
protected void onPostExecute(CustomObject custom) {
//some code
}
};
asyncTask的执行无法在Mockito的测试中完成,所以我需要以某种方式模拟它。我试着用PowerMock来嘲弄私有方法:
@Mock Context mockContext;
@Mock AsyncTask<Void, Void, CustomObject> mockAsyncTask;
@Test
public void methodTest() {
ClassToTest objectToTest = new ClassToTest(mockContext);
try {
PowerMockito.doReturn(mockAsyncTask).when(objectToTest, "privateMethod", ArgumentMatchers.anyBoolean());
objectToTest.methodToTest();
} catch (Exception e) {
e.printStackTrace();
}
}
这在PowerMockito行(NullPointerException)中给了我一个异常,它说
方法引发了“org.mockito.exceptions.Misusing.UnfinishedStubbingException”异常。无法计算Android.os.AsyncTask$MockitoMock$1952591544.ToString()
现在我已经没有办法模仿这个物体了。
我终于找到了答案:
@Test
public void methodTest() {
ClassToTest objectToTest = PowerMockito.spy(new ClassToTest());
try {
when(objectToTest, method(ClassToTest.class, "privateMethod", boolean.class)).withArguments(false).thenReturn(mockAsyncTask);
} catch (Exception e) {
e.printStackTrace();
}
}
并且就在类声明之前:
@PrepareForTest(ClassToTest.class)
问题内容: 我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子: 我该如何对私有方法的结果进行存根测试以测试公共函数的 更多代码 部分。 问题答案: 通常,您只是不直接测试或嘲笑私有和受保护的方法。 您要测试的是您的类的 公共 API。其他所有内容都是您的类的实现细节,并且如果更改它,则不应“破坏”您的测试。 当您发现“无法获得100%的代码覆盖率”时,这也对您有所帮助,因为您
我试图用Mockito/PowerMock模拟一个私有方法。我得到了NullPointerException ,我尝试做的简单示例是:
我想为我拥有的一个类编写一个单元测试。这个类有一个公共方法,在公共方法内部有对同一个类中的私有方法的调用。我想模拟对那些私有方法的调用。类与此类似: 对于我的单元测试,我尝试将PowerMock与Mockito和TestNG一起使用。下面是我对测试SomePublicMethod的测试的尝试: 当我运行这个测试时,我会得到一个异常和一些提示: 我在网上看了一些例子,但是我还没有找到一个专门使用Po
异常堆栈跟踪
我试图模拟一个私有方法(executeGetRequest),在我声明要为私有方法返回的模拟的那一行中,私有方法实际上是用null参数执行的,因此抛出了一个NullPointerException。 VlcPlayerMinimal。爪哇: VlcPlayerMinimalTest。爪哇: 堆栈跟踪: 它似乎PowerMockito实际上是调用的方法,我试图在行PowerMockito.do返回(
问题内容: 我正在尝试模拟一个进行JNDI调用的私有方法。从单元测试中调用该方法时,它将引发异常^。我想模拟该方法用于测试目的。我使用了另一个问题answer中的示例代码,并且在测试通过时,似乎仍在调用底层方法。我在方法中插入,然后将其打印到控制台。 有趣的是,如果我将第一个注释掉,则测试通过。?:( 那么,我如何模拟出一个私有方法,使其不被调用? ^可以理解,由于我的工作空间不支持JNDI,因此