문제

MVC 프로젝트에서 REST 서비스로의 호출을 추상화하는 데 사용되는 서비스 관리자 클래스가 있습니다.관리자 클래스가 수행하는 모든 작업은 Rest 호출(RestSharp 사용)을 설정하고 서비스 데이터를 MVC 애플리케이션에 다시 반환하는 것입니다.

그래서 처음에는 그렇게 사소한 클래스를 테스트하지 않을 생각이었지만 테스트가 더 복잡해질 수 있는 향후 변경 사항으로부터 보호해 주기로 결정했습니다.

그러나 여기에 딜레마가 있습니다.독립적으로 테스트할 수 있도록 사물을 얼마나 추상화해야 합니까?

그래서 MVC에 의해 내 RestClient가 내 관리자 클래스에 주입되도록 하고 있습니다.MVC 인젝터가 기본 URL을 설정하도록 합니다.이 모든 내용은 괜찮지만 다음과 같은 질문이 있습니다.

  • 내 메서드 호출의 경우 메서드에서 매개변수(userId)와 IRestRequest를 가져오도록 해야 합니까?
    • 내 문제는 내 인터페이스가 두 매개변수를 모두 포함해야 하기 때문에 갑자기 내 일반 서비스 관리자가 나머지 특정 서비스 관리자가 된다는 것입니다.
  • IRestRequest를 메서드에 삽입하지 않고 구현에서 이를 생성하도록 하면 테스트 중인 기본 메서드가 RestClient.Execute이므로 무시되고 실제 RestRequest에 신경 쓰지 않으므로 괜찮습니까?
    • 실제로 이것은 구현의 일부이므로 Execute 메소드가 적절한 RestRequest 객체로 전송되고 있는지 모의하고 확인할 수 있습니까?
  • 아니면 IRestRequest를 삽입하지 않고 대신 IRequestResolver를 생성자에 삽입해야 합니까?그런 다음 메서드 호출에서 메서드를 나타내는 문자열을 받는 IRequestResolver를 사용할 수 있습니다.그런 다음 이는 RestRequest 매개변수를 파악하고 메소드에 적절하게 채워진 RestRequest 객체를 반환하는 데 사용됩니다.
  • 아니면 기본적으로 첫 번째 글머리 기호 아래에 하위 글머리 기호를 수행하고 구체적인 구현을 사용해야 할까요?
  • 제가 놓친 다른 옵션이 있나요?

테스트 중인 실제 솔루션에 도달하면서 네 번째 글머리 기호 쪽으로 기울고 있습니까?

딜레마를 해결하는 데 도움이 되는 추가 세부정보가 필요하면 알려주시기 바랍니다.

도움이 되었습니까?

해결책

친구와 함께이 작업을 논의한 후에 나는 구체적인 구현을 사용하여 가기로 결정했습니다.

이 객체가 정말로 POCO이며, 추상화 할 필요가 없습니다 (추상화가 제공되는 경우).이것은 내 서비스 발신자의 내 구체적인 구현이므로 테스트중인 실제 솔루션은 통화입니다.나는 아마 이것을 조롱하고 RestRequest가 해야하는 방식이라고 불리는 것을 확인합니다.

그러나 우리가 생각한 짧은 대답은 POCO가 추상화 될 필요가 없다는 것입니다.

다른 팁

이 딜레마를 잘 알고 있습니다. 그리고 여기에 몇 번있었습니다.

모든 것을 추상화 할 수 있지만 무의미한 테스트를 끝낼 수 있으며 중요한 테스트 프레임 워크를 작성하는 것을 알게됩니다. '하나의 진정한 테스트 방법론'. 나는 실제로 사람들이 정수를 넣어야하는 추상적 인 인터페이스를 솔직하게 토론 한 대화에있었습니다.

나는 당신의 자신의 대답을 보았습니다. 그리고 나는 완전히 동의합니다.

가정과 테스트 행동을 검증 할 수있는 한 충분히 수행하고 있습니다. 당신이 말하는 것처럼 - 당신은 그 일이 바뀌 었는지 확인하고 자신의 맥락의 경계를 알아야합니다. 공급자가 현실적으로 변화 할 것인가? 아니요 - 그것을 추상적으로하지 마십시오.

최근에 나는 고용주를위한 대규모 Microsoft Dynamics CRM 솔루션을 설계했습니다. 궁극적으로 내 테스트는 CRM API가 괜찮다고 가정하고 내 포장지의 행동을 테스트합니다.

어쨌든, 그건 내가 볼 수있는 볼파 였어, 나는 이것이 당신에게 어떤 가치가 있기를 바랍니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top