Ive는 Powermock과 Mockito를 사용하여 많은 기사를 읽었으며 다양한 방법으로 시도했지만 여전히 정적 메소드의 단위 테스트 방법을 찾아 낼 수 없습니다.리소스 번들을 사용하는 유닛 테스트 정적 메소드
public static Map<String, String> getEntries() {
Map<String, String> myEntriesMap = new TreeMap<String, String>();
ResourceBundle myEntries = ResourceBundle.getBundle(ENTRIES_BUNDLE);
Enumeration<String> enumList = myEntries.getKeys();
String key = null;
String value = null;
while (enumList.hasMoreElements()) {
key = enumList.nextElement().toString();
value = myEntries.getString(key);
myEntriesMap.put(key, value);
}
return myEntriesMap;
}
코드는 이와 같이 약 30 개의 정적 메서드가 포함 된 레거시 클래스의 일부이며 리팩토링은 실제로 옵션이 아닙니다. 다른 정적 메소드에서와 마찬가지로 DB 연결도 검색 중입니다.
예 : 리소스 번들 ENTRIES_BUNDLE을 (를) 조롱하고 단위 테스트에서이 방법을 테스트하려면 어떻게해야합니까? 일반적으로 모든 정적 메서드에 적용 할 수있는 패턴을 찾고 있습니다.
예,이 방법은 실제로 현재 형태로 단위 테스트 할 수 없습니다. 그것은 정적이기 때문에가 아니라'ResourceBundle.getBundle'을 호출하기 때문입니다. 이론 상으로는 리팩토링이 훨씬 더 나은 선택이 될지라도, 정말로해야한다면 PowerMock으로 할 수 있습니다. 하지만 당신의 질문을보고 나는 당신이 왜 레거시 수업을 테스트하고 있는지 궁금합니다. 확실하게, 그것이 레거시 클래스라면, 단위 테스팅의 이점을 얻는 대부분의 기회는 이미 지나갔습니다. 그리고 만약 당신이 그것을 변경할 수 없다면, 당신의 테스트가 버그를 발견한다면 당신은 무엇을 할 것입니까? –
답변 해 주셔서 감사합니다. 나는 Junits를 작성함으로써 파생 된 가치에 관해 당신에게 완전히 동의합니다. 우리는이 프로젝트를 가지고 있으며 코드의 일부는 JUnits에 의해 다루어지고 코드의 일부는 그렇지 않습니다.이 아이디어는 Junits와 함께 최신 코드 전체를 가져오고 단위 테스트 케이스로 새로운 개발을 커버하는 것입니다. 레거시이며 테스트되고 안정된 코드는 (적어도 시점에서는) 리팩토링하고 싶지 않습니다. 그러나 당신이 Powermock로 이것을하는 방법을 향해 나를 가리킬 수 있다면, 그것을 말하고, 당신의 의견을보고, 그것은 매우 도움이 될 것입니다. – user2706486
저는 이것을 위해 모의하려고합니다 -하지만 https://code.google.com/p/powermock/wiki/MockitoUsage13에는 정적 메소드를 모방하는 방법에 대한 정보가 있습니다. 한 화면 아래 위로. 그러나 솔직히, 가능한 경우 로지 리오의 길을 먼저 시도하십시오. –