안 좋은 코드의 교과서인 제 코드에 대한 해결 방법이 있을까요?

emptynote의 이미지

개인적으로 오픈 소스 프로젝트 진행중인데

단위 테스트 작성을 할때

에러 메시지 변경시 단위 테스트 모듈도 같이 수정을 해야 하는 아래와 같이 작성을 하였습니다.

에러 메시지 변경시 코드를 같이 변경하는 짓은 누가 봐도 나쁜 코드입니다.

에러 체크 로직이 잘 동작하는지 확인해야 하기때문에 '에러 메시지'를 키로 해서 그 키를 검사하여 에러 체크 로직이 잘 동작함을 검사한건데요.

이것을 나쁜 코드가 아닌 좋은 코드로 해결하고 싶습니다.

여러 분들은 어떻게 이 문제를 해결하시나요?

@Test
	public void testClientSessionKey_theParameterClientRSAIsNull() {
		ClientRSAIF clientRSA = null;
		String symmetricKeyAlgorithm = null;
		int symmetricKeySize = -1;
		int symmetricIVSize = -1;
		boolean isBase64 = false;
 
		try {
			new ClientSessionKey(clientRSA, symmetricKeyAlgorithm, symmetricKeySize, symmetricIVSize, isBase64);
 
			fail("no IllegalArgumentException");
		} catch (IllegalArgumentException e) {
			String errorMessage = e.getMessage();
			String expcetedMessage = "the parameter clientRSA is null";
 
			assertEquals(expcetedMessage, errorMessage);
 
		} catch (Exception e) {
			log.log(Level.WARNING, "unknown error", e);
 
			fail("fail to create a instance of ClientSessionKey class becase of unknown error");
		}
	}
alstjr7375의 이미지

저라면 enum 사용할듯요.

emptynote의 이미지

제가 RPC 에 익숙한데 오픈 소스로는 이런 형태(참고 Netty + ProBuffer + tomcat 형태)로

제공하는것이 없어 제가 만들어 사용할려고 코다(= 구 신놀이)를 만들었습니다.

지금 제가 만든것 아무도 사용안하고 있기에 저는 미래에 사용할 분에 대해서 감사함을 갖고 있습니다.

하여 개인 적인 공부도 겸하면서 단위 테스트 통해서 품질(?)을 끌어 올리고 있습니다.

단위 테스트 하면서 파마미터 값 유효성 검사의 중요함을 알게되어서 단위 테스트 코드 보시면

하드 코딩이라고 말해도 무색하게 만들고 있습니다.

이것을 "깨지지 쉬운 테스트" 라고 말하는듯 합니다.

에러 메시지 변경되면 테스트가 깨지지 "깨지지 쉬운 테스트" 맞습니다.

여러 의견을 그래서 경청중인데요.

말씀하신 enum 으로 에러 메시지 식별자를 두어서 구별하면 어떻까 이런 생각도 해 보았지만

다른 관점에서 생각해 보면 "제약" 이라서 고민이 됩니다.

"깨지지 쉬운 테스트" 를 막기 위해서 "제약" 을 준수해야 하는 노력을 해야 하는것에 대해서 고민이 됩니다.

조금 더 고민해 보겠습니다.

alstjr7375의 이미지

저는 enum을 사용한다고 테스트에 커다란 제약이 생길거라 생각하지는 않네요.
혹시 어떤 제약이 있다고 생각하시는지 궁금합니다.

emptynote의 이미지

enum 도입하려는 노력이 더 추가되어야 한다는 말을 했어야 했는데

그것을 "제약" 이라고 말을 해서 죄송합니다.

저는 제가 작성중인 오픈 소스에 대한 주관을 가져야 합니다.

당위성과 enum 도입하는 비용에 대해서 좀더 숙고해서

기준을 잡고 도와주겠다고 오는 분들한테 그 잣대를 지켜 달라고 말을 해야 합니다.

아무래도 저한테는 시간이 필요합니다.

zelon의 이미지

반환값으로 enum이 맞습니다. 에러 메시지가 다국어만 지원하게 되어도 사용자체가 불가능한 유닛테스트가 될겁니다. 기능을 테스트하는 게 맞으시다면 enum이나 예외타입으로 바꾸시는게 좋아보입니다

-----------------------------------------------------------------------
GPL 오픈소스 윈도우용 이미지 뷰어 ZViewer - http://zviewer.wimy.com
블로그 : http://blog.wimy.com

emptynote의 이미지

좋은 말씀 감사합니다.

다만 저한테 조금 시간을 주셨으면 합니다.

현재 저는 게시판에 summernote 라는 html editor 를 추가 작업중이라

이거 안정화 시키고 도메인 따서 커뮤니티 오픈 하여 운영하려고 하다보니 많이 바쁘네요.

다시 한번 좋은 말씀 감사합니다.