2014-03-13 148 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