测试是否在返回Void的方法内的变量上调用了方法

时间:2019-08-02 12:56:08

标签: java unit-testing junit

假设我有一个这样的方法:

void MainWindow::on_tabWidget_tabBarClicked(int index)
{
    if (index == 1)
    {
        Error("Empty, back to main");
        ui->tabWidget->setCurrentIndex(0);
    }
}

如何编写Object myRandomObject; ... void foo(boolean input) { if(input) { myRandomObject.toString(); } } 测试以仅测试jUnit上实际上已调用toString()方法?

1 个答案:

答案 0 :(得分:2)

如果您的myRandomObject只是使用覆盖了toString的实现通过一些测试类定义来模拟自己,则设置一些标志然后在该标志上声明

private class TestRandomObject {
    private boolean toStringCalled;

    @Override
    public String toString {
        this.toStringCalled = true;
        return "test";
    }
}

或者甚至可以使用Mockito verify方法,如

Object randomObjectMock = mock(Object.class); 
// ...
verify(randomObjectMock , times(1)).toString();

编辑,不,你不能:)它会给你一个像有趣的消息一样的感受

  

Mockito无法验证toString()

     

toString()经常在幕后使用(即在IDE调试视图中的String串联期间)

他们说您可以stub使用此方法,但是即使对它进行存根处理也不会允许您以后使用verify。因此,似乎我的第一个建议是可行的