public class TestedClass
{
public void publicMethod()
{
privateMethod();
}
private void privateMethod()
{
}
}
我想用PowerMockito测试私有方法是否只被调用一次。
这是我的测试类:
@RunWith(PowerMockRunner.class)
@PowerMockIgnore("javax.management.*")
public class TestedClassTest
{
@Before
public void setUp()
{
}
@Test
public void testPrivateMethodCalledOnce() throws Exception
{
TestedClass spy = PowerMockito.spy(new TestedClass());
spy.publicMethod();
PowerMockito.verifyPrivate(spy, Mockito.times(772)).invoke("privateMethod");
}
}
尽管只在测试通过后调用。即使我在public方法中评论privateMethod,测试似乎也通过了。
public class TestedClass
{
public void publicMethod()
{
//privateMethod(); <-- test still passes
}
private void privateMethod()
{
}
}
有人知道我做错了什么吗?有人知道如何验证私有方法在单元测试中只调用了一次吗?
问题可能是:
.invoke("privateMethod")
可以解释为:
void invoke(stringmethodtoverify,Object…arguments)
javadoc,这是我们(显然)想要的。或因此,解决方案可以是(避免不正确的过载):
.invoke("privateMethod", new Object[0]) // which still *could* be
// confused with Object... but I "hope" the String in front saves us!:)
// if this works: .invoke("privateMethod", null) should also work.
或者正确地使用其中一种替代方法#
但这通常是过载库的问题... varargs使事情变得更糟/潜在的确定性!:-)
似乎我需要在这个特定的测试中包含@PREareForTest注释才能使其工作。现在测试失败了,这是它应该做的。另外-当我换成Mockito.times(1)时,它会起作用。
@RunWith(PowerMockRunner.class)
@PowerMockIgnore("javax.management.*")
@PrepareForTest(TestedClass.class) // <--- I didn't include this in the question
public class TestedClassTest
{
@Before
public void setUp()
{
}
@Test
public void testPrivateMethodCalledOnce() throws Exception
{
TestedClass spy = PowerMockito.spy(new TestedClass());
spy.publicMethod();
PowerMockito.verifyPrivate(spy, Mockito.times(1)).invoke("privateMethod");
}
}
我试图模拟一个私有方法(executeGetRequest),在我声明要为私有方法返回的模拟的那一行中,私有方法实际上是用null参数执行的,因此抛出了一个NullPointerException。 VlcPlayerMinimal。爪哇: VlcPlayerMinimalTest。爪哇: 堆栈跟踪: 它似乎PowerMockito实际上是调用的方法,我试图在行PowerMockito.do返回(
我有一门课看起来像这样: 我想使用Mockito和Powermock为此编写一个单元测试。我知道我可以这样模仿私有方法: 但是我如何告诉它抛出异常呢?我知道会是这样的: 那里有什么? 请注意,异常是一个私有内部类,因此我不能只执行,因为从单元测试中无法访问。
有人能帮帮我吗?提前谢了。
我试图在测试的类中模拟一个私有方法,如下所示。 现在我需要测试方法和mock。 我尝试创建间谍的上述类,但该方法得到调用时,我这样做下面 在第二行本身被调用。而且,不会被模仿。 也许我用错误的方式创建了间谍对象?无法执行
我需要使用TestNG、Mockito和现在的PowerMockito针对预先存在的代码库编写单元测试,以更轻松地测试私有和静态方法。我目前正试图针对我们正在测试的类中的一个私有void方法编写一个测试,但无法解决这个问题。在普通的PowerMock API中,有一些方法称为“replayAll()”、“verifyAll()”、“expectLastCalled()”、“code>”,它们适用于