要验证模拟,是需要验证的退货

本文关键字:验证 模拟 | 更新日期: 2023-09-27 18:36:32

我在使验证在数据库调用上工作时遇到问题。

有一个方法,我只是尝试验证是否进行了数据库调用。

我无法发布真正的代码,但这里有一个接近的例子。

    protected void ReportDB(uint waitTimeInMinutes)
    {
        //check database connection
        Status dbStatus = Status.Ok;
        string dbComment = "ok";
        try
        {
            Data.GetActive("1");
        }
        catch (Exception ex)
        {
            dbComment = "Unable to access the database: " + ex.Message;
            dbStatus = Status.Critical;
        }
        //Report Status.
    }

所以基本上 GetActive() 方法只是进行数据库调用。如果它没有抛出异常,那么我们很好,连接性也很好。

我的测试方法是。

    [TestMethod]
    public void ReportDBStatusTest()
    {
        _fakeData.Setup(s => s.Data.GetActive(It.IsAny<string>()));
        _unitUnderTest = new Service();
        _unitUnderTest.ReportDB(0);
        _fakeData.Verify(s => s.Data.GetActive(It.IsAny<string>()), Times.Once());
    }

我通过调试并调用该方法和所有内容,但验证说它被称为 Times.Never。 我想我可能只是误解了如何正确做到这一点。

错误:

预期在模拟上调用一次,但为 0 次:s => s.Data.GetActive(It.IsAny())配置的设置和调用:

要验证模拟,是需要验证的退货

错误是意料之中的。这是因为"ReportDB"对象中的"数据"对象与"_fakeData"对象中的"数据"对象不同。

一种解决方法是将"ReportDB"对象中的"数据"对象外部化,以便可以对其进行模拟。否则,您需要更改单元测试。