如何在单元测试中测试捕获块中的日志方法

本文关键字:日志 方法 测试 单元测试 | 更新日期: 2023-09-27 17:50:00

我有下面的代码,我要为它写一个单元测试

    protected virtual string GetTokenFromTheWebrequest(WebRequest httpWebRequestObject)
    {
        try
        {
            HttpWebResponse responseHttpPostForToken = (HttpWebResponse)httpWebRequestObject.GetResponse();
            string tokenJson = GetContentResponse(responseHttpPostForToken);
            AccessToken accesstokenObj = DeserializeToAccessToken(tokenJson);
            return accesstokenObj.Token;
        }
        catch (Exception Error)
        {
            Log.Debug("error");//I want to test this method
            throw Error;
        }
    }

对于这个,我有这个单元测试

     [Test]
    [ExpectedException(typeof(JsonReaderException))]
    public void GetTokenFromTheWebrequestTestwithInValidHttpWebResponseOjectJsonReader()
    {
        var mockHttpWebResponse = new Mock<HttpWebResponse>();
        var mockHttpWebRequest = new Mock<HttpWebRequest>();
        var mockLog = new Mock<ILog>();
        mockHttpWebRequest.Setup(c => c.GetResponse()).Returns(mockHttpWebResponse.Object);
        mockedSurveyMonkeyAPIService.Setup(y => y.GetContentResponse(mockHttpWebResponse.Object)).Returns(TestData.TestData.SampleResponseStream);
        mockedSurveyMonkeyAPIService.Setup(z => z.DeserializeToAccessToken(TestData.TestData.SampleResponseStream)).Throws(new JsonReaderException());
        //mockLog.Setup(x => x.Debug("error")).Throws(new WebException());
        var token = mockedSurveyMonkeyAPIService.Object.GetTokenFromTheWebrequest(mockHttpWebRequest.Object);
        mockLog.VerifySet(x => x.Debug("error"),Times.Once); //its not going till this when i debug
    }

谁能建议如何检查日志是否。

如何在单元测试中测试捕获块中的日志方法

你似乎没有测试任何你自己的代码…你已经嘲笑了在这种方法中使用的几乎所有东西。这就引出了what is actually being tested的问题,答案是正在测试您的实现细节,而不是任何逻辑。你甚至模拟了日志记录器,所以你实际上是在测试。net try-catch机制。

如果您对该方法做了任何微小的更改,即使行为相同,您的测试也会中断。这不是一种你想要束缚自己的测试。

有更好的测试方法。例如,如果您想测试您的日志记录器-在此方法的隔离下测试它,以便您知道您的日志记录器是否正常工作。不要通过在使用日志记录器的任何地方测试对它的调用来测试它。