java - 종류 - junit 이란




JUnit 테스트 케이스에서 파일을 비교하려면 어떻게해야합니까? (4)

이 질문에는 이미 답변이 있습니다.

작은 프로젝트에 JUnit을 구현하고 싶습니다. JUnit에 대해 조금 배우고 싶기 때문에 작업하고있는 작은 프로젝트에 JUnit을 구현하고 싶습니다.

필자가 읽은 튜토리얼은 특정 출력이있는 메소드를 참조합니다.

제 경우에는 파일이 출력됩니다. 어떻게해야합니까? 어떤 간단한 예입니까? 이것으로 나를 도울 수있는 어떤 접근법?

파일은 void private 메소드로 빌드되는 원시 텍스트 파일입니다.


당신의 방법이 파일을 쓰고 나면, 단위 테스트에서 파일을 읽고 그것이 정확하게 쓰여졌는지 검증 할 수 있습니다.

또 다른 의미는 데이터를 검색하여 파일에 기록하는 메서드로 반환하는 메서드로 메서드를 분할하는 것입니다. 그런 다음 첫 번째 메소드에서 반환 된 데이터가 정상인지 여부를 확인할 수 있습니다.

또 다른 가능한 방법은 OutputStream 을 데이터를 쓰는 메소드에 전달하는 것입니다. "실제 코드"에서는 FileOutputStream / FileWriter 전달할 수 있으며 테스트 코드에서는 OutputStream 의 mock 구현을 작성하고 무엇이 그것에 쓰여지고 있는지 확인할 수 있습니다.


비록 당신의 질문이 단순 해 보일지 모르지만 그것은 단위 테스트의 핵심에 부딪치게됩니다. 테스트 가능한 올바른 형식의 코드를 작성해야합니다. 일부 전문가는 단위 테스트를 먼저 작성한 다음 구현 클래스를 작성해야한다고 조언합니다.

귀하의 경우에는 귀하의 방법이 예상 파일을 실행하고 생성 할 수 있도록 허용하는 것이 좋습니다. 그러면 귀하의 단위 테스트에서 파일이 올바르게 형성되었다고 분석 할 수 있습니다.


주어진 입력 세트에 대해 올바른 출력 파일을 얻고 해당 입력으로 void 메소드를 호출하는 테스트를 설정 한 다음 유효성이 검증 된 출력 파일을 메소드에 의해 생성 된 것과 비교하십시오. 메소드를 출력 할 위치를 지정하는 방법이 있는지 확인해야합니다. 그렇지 않으면 테스트가 매우 약해집니다.

@Rule
public TemporaryFolder folder = new TemporaryFolder();

@Test
public void testXYZ() {
    final File expected = new File("xyz.txt");
    final File output = folder.newFile("xyz.txt");
    TestClass.xyz(output);
    Assert.assertEquals(FileUtils.readLines(expected), FileUtils.readLines(output));
}

텍스트 파일 비교를 위해 commons-io FileUtils 를 사용하고 테스트가 실행되기 전에 출력 파일이 존재하지 않도록 JUnit의 TemporaryFolder 를 사용합니다.






text-files