2014-03-13 89 views
0

我有下面的代码,我正在写一个单元测试如何测试在catch块日志方法在单元测试

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 
    } 

任何人都可以建议如何检查是否正确调用Log.Debug。

回答

0

你似乎没有测试任何你自己的代码......你已经嘲笑了几乎所有在该方法中使用的东西。这引出了问题what is actually being tested,答案是你的实现细节正在被测试,而不是任何逻辑。你甚至嘲笑记录器,所以你真的在这里测试.NET的try-catch机制。

如果您对此方法做出任何细微更改,即使行为相同,您的测试也会中断。这不是你想要枷锁的那种测试。

有更好的测试方法。例如,如果你想测试你的记录器 - 单独测试这个方法,这样你就知道你的记录器工作。不要在使用记录器的任何地方通过测试记录器来测试记录器。

+0

好的我会在一个单独的测试方法中测试我的日志功能,我应该怎么做,我的意思是我的测试断言或验证语句应该是什么样子。 – user3324848

+0

你的记录器做了什么/暴露? – Fenton

+0

我使用的是log4net,它将错误消息及其详细信息写入文件中,是否需要更多详细信息? – user3324848