Closed ohahohah closed 4 years ago
문제 풀이용 md 파일을 만들고 있는데, 테스트 케이스를 어떻게 할지에 대해서 얘기가 필요할 것 같습니다 @ohahohah @HojinJava 코멘트 부탁드려요
네 전 testcase 공유는 필수라고 생각합니다. 하지만 md가 아닌 소스코드 형태로 테스트케이스가 공유되어야한다고 생각합니다. 여기서 testcase 라 함은 입력값, 실제출력값, 예상값과 같은 정보를 포함한 테스트 코드 까지입니다.
@ohahohah 네, 저도 테스트 케이스가 공유 되어야 한다는 생각에 동의합니다. 그러나, 테스트 코드의 구조도 포함이 되야하는가 생각해 봐야 할 것 같습니다. 예를들어 java의 Junit를 이용한 테스트라고 했을 때, 그 assertTrue() 와 같은 메서드 호출 하기 위한 테스트 클래스의 구조를 말하는 것입니다. 제가 테스트 코드를 너무 간단히 생각하는 것일까 싶어서, 다른분들의 의견을 들어보고 싶습니다
나는 코딜리티에서 정확성을 제시해주고 있기 때문에 단지 맞다 틀리다를 제공하는 assertTrue() 같은 기능이 필요할까 살짝 의구심이 드는데, 만약 두분이 필요하다고 느낀다면 나도 같이 작성해서 공유할 수 있습니다.
근데 알고리즘 풀면서 테스트케이스가 필요한 경우는 내 답은 뭐고, 원래 답은 뭐다 이런 결과보다는 과정에서 틀린 이유를 잡아주는 케이스는 많이 필요하다고 느끼고 있어 이번에 푼 문제(CountDiv)로 예시를 들자면
6~11 까지 2로 나눌 수 있는 값은 6,8,10 으로 결과 3을 리턴을 해야되지만
내 답은 6,8, 이며 결과는 2이다.
이런식으로 과정에서 틀린점을 지적해주는건 필요하다고 느끼는데.
모듈화가 많이 힘들꺼같아서 제안은 안하고있었어.
정리하자면, 나는 코딜리티에서 제공해주는 테스트케이스가 있기 때문에 단지 junit assertTrue()메소드로 하는건 중복될꺼같다는거고, 내가 필요한 테스트케이스는 왜 틀렸는지 알려주는건 필요하다고 느낍니다.
@kimsunoh 저도 테스트코드 구조까지 공유해야하나 의문이 들긴했었는데요. 나중에 취합이 어렵지 않을까 생각도 들구요. 그럼에도 불구하고 저는 테스트코드 자체를 공유하는게 낫다는 생각이 들어요.
@Test
public void 범위가_벗어난_예외값처리하는지_확인(){
assertEqual(solve(outOfRangeInput), expectedValueWhenErrorOccur);
assertEqual(solve(outOfRangeOtherInput),expectedValueWhenErrorOccur);
}
@Test public void 전체솔루션말고_그_안에서_사용하는_작은메소드_동작확인(){ assertEqual(max(inputA,inputB), inputB); }
이런식으로 단순히 정답값과 내가 푼 값이 일치하는지 외에 정보를 더 담을 수 있다고 생각해요.
- 두번째는 편리함과 코드리뷰를 좀 더 세세하게 할 수 있다는 점? 다른 사람의 테스트케이스를 눈으로 보는 것 뿐만아니라 바로 다운로드 받아서 실행해볼 수 있으니까요.
@HojinJava 나도 그 부분을 어떻게 하면 번거롭지 않게 공유할 수 있을까 고민이 되어.
- 저번 시간에 내가 올렸던 solution 코드에 assertResult하는 것에
- 입력값
- 내가 푼 정답값
- 원했던 예상 결과값(나와야하는값, 정답)
위에 세가지 정보를 print 해주는데, 이걸 공유하려면 내가 콘솔에서 복사해서 또 따로 적어야하니까 귀찮더라고.
그래서 내가 푼 값과 예상결과값이 불일치했을때, 위에 정보를 파일에 자동으로 저장해주도록 테스트 소스를 덧붙이면 어떨까 싶은데.
- 해당 템플릿은 이미 가지고 있고(hackerrank에서는 output값을 다 파일에 쓰게 되어있음), 내일 시간이 되면 공유할게. 아직 codility맞춤형은 없음.