먼저 코드를 테스트하기 위해 모의하지 않아도됩니다. 예를 들어, JSON을 Movie
객체로 역 직렬화 할 수 있는지 테스트하는 중이라면 Movie
클래스에서 공용 또는 내부 ParseJSON
명령을 테스트하여이를 수행 할 수 있습니다.
그러나 조롱에 대해 묻기 때문에 모의를 사용하여이 테스트를 작성할 수있는 방법 중 하나를 간략히 살펴 보겠습니다. 작성된대로 Movie_Information_Is_Loaded_Correctly()
은 통합 테스트와 유사합니다. 이것을 단위 테스트로 바꾸려면 은 웹 요청을 Tomato
클래스가 조롱하도록 만들 수 있습니다. 한 가지 방법은 ITomatoWebRequester
인터페이스를 만들고이를 생성자의 Tomato
클래스에 대한 매개 변수로 전달하는 것입니다. 그런 다음 ITomatoWebRequester
을 조롱하여 예상하는 웹 응답을 반환하면 Tomato
클래스가 해당 응답을 올바르게 구문 분석하는지 테스트 할 수 있습니다.
코드는 다음과 같은 것을 볼 수 있었다 :
public class Tomato
{
private readonly ITomatoWebRequester _webRequester;
public Tomato(string uniqueID, ITomatoWebRequester webRequester)
{
_webRequester = webRequester;
}
public Movie FindMovieById(int movieID)
{
var responseJSON = _webRequester.GetMovieJSONByID(movieID);
//The next line is what we want to unit test
return Movie.Parse(responseJSON);
}
}
public interface ITomatoWebRequester
{
string GetMovieJSONByID(int movieID);
}
이 테스트하려면, 당신은 당신이 기대하는 결과를 반환하는 ITomatoWebRequester을 만들 MOQ 같은 조롱 프레임 워크를 사용할 수 있습니다. MOQ에 다음과 같은 코드가 작동해야 수행합니다
[Test]
public void Movie_Information_Is_Loaded_Correctly()
{
var mockWebRequester = new Moq.Mock<ITomatoWebRequester>();
var myJson = "enter json response you want to use to test with here";
mockWebRequester.Setup(a => a.GetMovieJSONByID(It.IsAny<int>())
.Returns(myJson);
Tomato tomato = new Tomato("t4qpkcsek5h6vgbsy8k4etxdd",
mockWebRequester.Object);
var movie = tomato.FindMovieById(9818);
movie.Title.ShouldEqual("Gone With The Wind");
}
이 경우 모의에 대한 좋은 점은 걱정하지 않아도됩니다 실제 ITomatoWebRequester
는 JSON을 반환을 통해 이동이에 대한 모든 농구 돌아 오면, 테스트에서 정확히 원하는 것을 반환하는 조롱을 만들 수 있습니다. 바라건대이 대답은 조롱하는 데 알맞은 인트로 역할을하기를 바랍니다. 분명히 프로세스를 작동하는 방법에 대한 더 나은 느낌을 얻기 위해 조롱 프레임 워크를 읽는 것이 좋습니다.
조롱 프레임 워크를 사용 해본 적이 있습니까? 외부 API 호출을하는 메소드에 대해 단위 테스트를 많이 수행하려는 경우에는 매우 유용 할 수 있습니다. –