gpt4 book ai didi

java - 使用Powermockito检查私有(private)方法是否被调用

转载 作者:行者123 更新时间:2023-11-30 07:20:57 26 4
gpt4 key购买 nike

我想检查我要测试的类的私有(private)方法是否已执行或未使用 powermockito。

假设我有这个类要测试:

public class ClassToTest {
public boolean methodToTest() {
//doSomething (maybe call privateMethod or maybeNot)
return true;
}

//I want to know if this is called or not during the test of "methodToTest".
private void privateMethod() {
//do something
}
}

当我测试“methodToTest”时,我想检查它是否返回正确的结果,以及它是否执行私有(private)方法“privateMethod”。在搜索其他讨论时,我编写了这个使用 powermockito 的测试,但它不起作用。

public class TestClass {

@Test
testMethodToTest(){
ClassToTest instance = new ClassToTest();
boolean result = instance.methodToTest();
assertTrue(result, "The public method must return true");

//Checks if the public method "methodToTest" called "privateMethod" during its execution.
PowerMockito.verifyPrivate(instance, times(1)).invoke("privateMethod");
}
}

当我使用调试器时,最后一行(PowerMockito.verifyPrivate...)似乎不会检查私有(private)方法在测试期间是否已执行一次,而是似乎执行私有(private)方法本身。此外,测试通过了,但使用调试器,我确信在调用“instance.methodToTest()”期间不会执行私有(private)方法。怎么了?

最佳答案

我会以更简单的方式做到这一点,无需 PowerMockito。考虑一下这个(它是某种Spy对象):

public class TestClassToTest {

private boolean called = false;

@Test
public void testIfPrivateMethodCalled() throws Exception {
//given
ClassToTest classToTest = new ClassToTest() {
@Override
void privateMethod() {
called = true;
}
};

//when
classToTest.methodToTest();

//then
assertTrue(called);
}
}

这需要将 privateMethod() 更改为包私有(private)(但这没有任何问题)。

但请记住,测试实现是一种不好的做法,可能会导致测试脆弱。相反,您应该只测试结果。

关于java - 使用Powermockito检查私有(private)方法是否被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37591330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com