2013-06-13 2 views
0

간단한 테스트를 실행하여 Maven 프로젝트의 src/test/resources 폴더에 저장했지만 JUnit 테스트에 실패한 속성 파일의 값을 확인하려고합니다. 내 테스트는 파일 OK를 선택하지만 파일이로드되지 않는 것처럼 예상 값을 반환하지 않습니다. 다른 사람도 비슷한 문제가 있습니까? 다음과 같이 내 코드/테스트는 다음과 같습니다Junit 테스트가 Properties 파일을로드 할 수 없음

내 응용 프로그램 컨텍스트 파일 :

<bean id="myProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
     <property name="location" value="classpath:test.properties"/> 
</bean> 

내 코드 :

@Resource(name = "myProps") private Properties myProps; 
@Value("#{myProps['totalNumberOfChanges']}") private String totalNumberOfChangesStr; 
@Value("#{myProps['delayTime']}") private String delayTimeStr; 

    public void parseAttributesFromConfigFile() { 
     String methodName = "parsePropertyAttributesFromConfigFile"; 
     try { 
      totalNumberOfChanges = Integer.parseInt(totalNumberOfChangesStr); 
      delayTime = Integer.parseInt(delayTimeStr); 
      numEntriesToIterateThru = (totalNumberOfChanges/delayTime); 
     } catch (NumberFormatException nfe) { 
      LOGGER.error(methodName, "", "Number Format Exception Occured" + nfe.getMessage()); 
     } 
    } 

내 JUnit 테스트 :

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:META-INF/spring/Testpu.xml" }) 
public class ConfigPropertiesTest { 
    private final int NUM_ENTRIES_TO_ITERATE_THRU = 100; 
    private final int TOTAL_NUMBER_OF_CHANGES = 100000; 
    private final int DELAY_TIME = 1000; 

    private ConfigProperties configProperties; 

    @Before 
    public void setUp() throws Exception { 
     configProperties = new ConfigProperties(); 
    } 

    @Test 
    public final void testParseAttributesFromConfigFileIsCalled() { 
     configProperties.parseAttributesFromConfigFile(); 

     int numEntriesToIterateOver = configProperties.getNumEntriesToIterateThru(); 
     assertEquals(numEntriesToIterateOver, NUM_ENTRIES_TO_ITERATE_THRU); 

     int numberOfChanges = configProperties.getTotalNumberOfChanges(); 
     assertEquals(numberOfChanges, TOTAL_NUMBER_OF_CHANGES); 

     int delayTime = configProperties.getDelayTime(); 
     assertEquals(delayTime, DELAY_TIME); 
    } 
} 
+0

을 사용하여 해당 인스턴스를로드하십시오. 다음 문장을 명확히하십시오. '내 테스트는 파일을 가져오고 있지만 파일은 예상대로 리턴하지 않습니다. 그 짐을 싣고있는 것 같아. 파일이 정상적으로 픽업되고 있다는 것을 어떻게 알 수 있습니까? 그리고 픽업이 정상적으로 실행되면 '로드가 안되는 것'으로 무엇을 의미합니까? –

+0

파일 이름을 무언가로 변경하면 "초기화 메소드 호출에 실패했습니다. 중첩 예외는 java.io.FileNotFoundException : 클래스 경로 리소스 [test1.properties]가 존재하지 않아 열 수 없습니다."와 같은 다른 오류가 발생합니다. 나는 파일 OK를 집어 들고 있다고 가정하고 주석이나 내가 Bean을 정의한 방식에 문제가있다. 또한, 내가 "totalNumberOfChangesStr"의 값을 Null 그래서 숫자 형식 예외를 얻을 디버깅 할 때. – user676567

+0

당신은'Properties'의 내용을 인쇄 해 보았습니다. 이것은 다음 두 가지 문제 중 하나로 이어질 것입니다. 1. 데이터/키가 속성에서 예상대로되지 않습니다. 2.'@ Value'가 예상대로 작동하지 않습니다. 문제의 범위를 좁히면 진단하는 데 도움이됩니다. –

답변

0

당신은 ConfigProperties를 만드는 수업에서 Before 방법으로 주석을 기반으로 채워진 값에 Spring을 넣으려면 bean을 Spring 컨텍스트의 일부로 만들어야합니다. Spring 컨텍스트에서 ConfigProperties의 인스턴스를 가지고 있다면, @Autowired

+0

훌륭하게 작동했습니다! 도와 주신 분과 명확한 설명에 감사드립니다. – user676567

관련 문제