1

ベリファイをDB呼び出しで機能させるのに問題があります。

データベース呼び出しが行われたことを確認しようとしているメソッドがあります。

実際のコードを投稿することはできませんが、ここに近い例があります。

    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と呼ばれていることが示されます。私はこれを正しく行う方法を誤解しているだけかもしれないと思います。

エラー:

モックでの呼び出しが1回期待されていましたが、0回でした。s=> s.Data.GetActive(It.IsAny())構成されたセットアップと呼び出し:

4

1 に答える 1

5

エラーが予想されます。これは、「ReportDB」オブジェクト内の「Data」オブジェクトが「_fakeData」オブジェクト内の「Data」オブジェクトと同じではないためです。

回避策の1つは、「ReportDB」オブジェクトの「Data」オブジェクトを外部化して、モックできるようにすることです。それ以外の場合は、単体テストを変更する必要があります。

于 2012-06-08T16:52:56.160 に答える