我想为基于布尔值执行的方法编写 JUnit,例如:
if(this.getTypePanel().isPanelTypeABC()){
//someOperation
}
else{
//otherOperation
}
this.getTypePanel
返回的地方LoadPanel
.在我的测试课上嘲笑它:
@Mock
LoadPanel loadPanel;
所以在测试课上,我莫名其妙地想设置loadPanel.setTypePanel("ABC")
, 因此,上述条件this.getTypePanel().isPanelTypeABC()
将根据我设置的内容评估为true
或false
。
最简单的方法是什么?
这样行得通吗?
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);
}
}