我有以下代码,我正在编写单元测试
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 :(得分:0)
您似乎没有测试任何自己的代码......您已经嘲笑了该方法中使用的所有内容。这引出了问题what is actually being tested
,答案是您的实现细节正在测试,而不是任何逻辑。你甚至嘲笑过记录器,所以你真的在这里测试.NET try-catch机制。
如果对此方法进行任何微小更改,即使行为相同,您的测试也会中断。这不是你想要束缚自己的那种考验。
有更好的测试方法。例如,如果要测试记录器 - 单独测试此方法,以便了解记录器的工作原理。不要通过在任何地方测试对它的调用来测试记录器。