2017-11-23 5 views
1

상황이 있습니다. 서비스 클래스에 하나의 기능을 제공하고 싶습니다. 예를 들어, 일부 params를 기반으로 json 파일을 생성합니다. 하나의 공용 메서드가 있고 일부 전용 메서드가 호출됩니다. 공개적으로 몇 가지 개인적인 방법이 있으며, 이제는 유닛 테스팅에 문제가 있습니다. 나는 가능성을 안다. (테스트 프라이빗 메소드, 공개 (NO!), refelctions, private 패키지), 가장 좋은 것은 private 패키지이다.하지만 그 서비스 클래스는 xx.service 패키지 안에있다. 외부에서 볼 수 있습니다 ...서비스 계층의 개인 메서드

저는 스프링 부트를 사용하고 있습니다. 제 질문은 : 아마도 이것은 개인 클래스를 서비스 클래스 내에 유지하는 나쁜 접근입니다. 어쩌면 그들을 어떤 종류의 util 클래스로 옮길 수 있습니까? (방법은 방법 util을 가지 것을 정직하게하려면 ..)

도와주세요 :)

+0

서비스 계층에서 JSON을 생성하는 것은 실수 일 수 있습니다. 서비스 계층은 도메인 객체를 조작해야합니다. JSON으로 또는 JSON으로부터의 변환은 프리젠 테이션 레이어에 있어야합니다. – Raedwald

+0

그것은 단지 불행한 예입니다;) –

답변

2

테스트에서 공개 방법은 테스트를 유지/너무 많은 개인 방법과 단순히 열심히하는 설정을 사용하는 경우 어쩌면 그 논리의 일부를 특수화 된 클래스에 추출해야 할 때입니다.

이상적으로 하나 또는 두 개의 공용 메소드가 있습니다.

그런 다음이 도우미 클래스를 독립적으로 테스트합니다 (테스트는 이제는 간단해야합니다). 주 서비스에서는 종속성으로 간단히 주입합니다. 그런 다음 주 서비스 테스트의 종속성을 원하는대로 조롱합니다.

+0

답변 해 주셔서 감사합니다. –

+0

답변 해 주셔서 감사합니다. 그러나 내 개인 메서드는 짧습니다. 그리고 그들은 하나의 공용 메서드로 구현 된 특정 유스 케이스에 특화되어 있습니다. 예 : 공개 파일 doSth (이름) { if (existFileWithName (name)) { return modifyFile (name); } } 개인 existFileWithName (이름) {...} priavte modifyFile (이름) {...} 나는 공공 방법을 테스트 할 수 있습니다, 그것은 개인 방법을 사용 ... 는하지만, TDD를 시도하고있다 그리고 처음에는 개인 메소드 fucntionality를 작성하고 테스트하려고합니다. –

+0

공용 메소드에서 개인 메소드를 약간 사용하면 쉽게 테스트 케이스를 작성할 수 있습니다 (짧고 요점) 그때 당신의 좋은 .. 그 테스트를 만드는 데 문제가 생겼을 때 .. 이름을 짓는 것 .. 유지하는 것 .. 그리고 나서 전문화 된 클래스를 추출하고 생성하는 시간. –