我有以下代码
public class A extends B {
private boolean workDone = false;
@Override
public void publicMethod(boolean flag) {
if (!workDone) {
privateMethod();
workDone = true;
}
super.publicMethod(flag);
}
private void privateMethod() {
// some logic here
}
}
我对嘲笑不熟悉。我有以下疑问。我正在尝试测试公共方法。
布尔标志的变化一样
在进行单元测试时,我们验证被测试代码的公共可观察行为。这是CUT传递的返回值及其与依赖项的通信。
CUT中的私有变量和私有方法是我们不想(明确地)测试的实现细节,因为我们希望它们是可更改的,而不会阻止我们的测试。
在极少数情况下,对超类方法的调用可以被视为“与依赖项的通信”。在这种情况下,您将创建切割的spy()
。但通常这也应该被视为实施细节。。。
如果您真的想验证它,您需要更改A类并将超级调用提取到私有方法中:
public class A extends B {
private boolean workDone = false;
@Override
public void publicMethod(final boolean flag) {
if (!workDone) {
privateMethod();
workDone = true;
}
callParentPublicMethod(flag);
}
private void callParentPublicMethod(final boolean flag) {
super.publicMethod(flag);
}
private void privateMethod() {
System.out.println("A: privateMethodCalled");
}
}
完成后,您可以使用PowerMock验证私有方法调用:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ A.class })
public class ATest {
@Test
public void publicMethod_test_false() throws Exception {
A spy = PowerMockito.spy(new A());
spy.publicMethod(false);
PowerMockito.verifyPrivate(spy).invoke("privateMethod");
PowerMockito.verifyPrivate(spy).invoke("callParentPublicMethod", false);
}
@Test
public void publicMethod_test_true() throws Exception {
A spy = PowerMockito.spy(new A());
spy.publicMethod(true);
PowerMockito.verifyPrivate(spy).invoke("privateMethod");
PowerMockito.verifyPrivate(spy).invoke("callParentPublicMethod", true);
}
}
希望这有帮助。
我使用的是JMockit1.1,我所要做的就是调用一个私有方法并测试返回值。然而,我很难从JMockit去封装示例中准确理解如何做到这一点。
当我从测试类调用functions方法时,我希望executeSol方法不要运行,因为它会导致错误。
已更新测试用例,但仍不工作。
我正在使用powermock。我面临以下场景的问题。 更新时间: 我的问题不同。在另一个链接中给出的示例中,私有方法返回了一些值。在我的例子中,这两种方法都返回Void。 面临为myPublicMethod编写测试用例以模拟同一类中的私有方法的问题。 我想模拟myPrivateMethod方法,因为它不应该被调用,但是测试用例应该包括myPublicMethod方法。这两种方法都是无效的。 我不能
问题内容: 这可能吗?我尝试过,但EasyMock抱怨时间必须> = 1 问题答案: 我设法提出了一个解决方案:
有没有任何变通办法来直接测试那些方法而不公开它们?