如何使用 PowerMockito 模拟 Java 中的集合方法以获得正确的布尔返回类型?



我想为基于布尔值执行的方法编写 JUnit,例如:

if(this.getTypePanel().isPanelTypeABC()){
//someOperation
}
else{
//otherOperation
}

this.getTypePanel返回的地方LoadPanel.在我的测试课上嘲笑它:

@Mock
LoadPanel loadPanel;

所以在测试课上,我莫名其妙地想设置loadPanel.setTypePanel("ABC"), 因此,上述条件this.getTypePanel().isPanelTypeABC()将根据我设置的内容评估为truefalse

最简单的方法是什么?

这样行得通吗?

when(loadPanel.isPanelTypeABC()).thenReturn(true)

模拟负载面板是不够的。您是否也向测试所针对的类注入了 Mock?

如果是,你能告诉我们Load Panel是否作为全局对象存储在类中吗?如果是这种情况,我们可以使用以下方法手动设置它:

LoadPanel abcLoadPanel = new LoadPanel;
abcLoadPanel.setTypePanel("ABC")
ReflectionTestUtils.setField(className, loadPanel, abcLoadPanel);

你的想法对于单元测试来说不是很好。如果要运行适当的单元测试,则永远不应依赖任何外部类的行为。

但是,为您的问题提供解决方案,我认为typePanel是您班级的私人成员。所以你可以做这样的事情。

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@Mock
private LoadPanel typePanel;
@InjectMocks
private MyClass myClass;
@Before
public void setUp() {
when(typePanel.isPanelTypeABC()).thenReturn(true);
}
}

最新更新