system-properties how - Java에서 시스템 프로퍼티를 Null로 설정




eclipse command (4)

유닛 테스트에서 "workingDir"시스템 속성을 Null로 설정해야합니다.

하지만 그것은 나에게 줄 때문에 나는 이런 식으로 할 수 없어 NullPointerException :

System.setProperty("workingDir", null);

내가 어떻게 해?


Answers

System.setProperty() 는 내부적으로 Properties 객체를 사용하여 구현되며,이 객체는 좋은 Hashtable 사용합니다. 이러한 해시 테이블은 put() 메서드를 사용하여 null 값을 설정할 수 없으므로 실제로 그렇게 할 수는 없습니다. Jon Skeet의 게시물에는 해결책이 있습니다.


실제 null 값을 갖도록 속성을 설정할 수 없습니다. 다음과 같이이 값을 지울 수 있습니다.

System.clearProperty("workingDir");

인수가 null의 경우, setProperty 메소드는 NullPointerException를 Throw하므로, 그렇게 할 수 없습니다. Jon이 제안한대로 빈 문자열을 거기에 넣고 단위 테스트에서 확인하거나 단순히 clearProperty를 확인할 수 있습니다.


JUnit과 함께 사용할 수있는 AssertJ 정문 사용 :

import static org.assertj.core.api.Assertions.*;

@Test
public void testFooThrowsIndexOutOfBoundsException() {
  Foo foo = new Foo();

  assertThatThrownBy(() -> foo.doStuff())
        .isInstanceOf(IndexOutOfBoundsException.class);
}

그것은 테스트에서 예상되는 라인이 예외를 던 @Test(expected=IndexOutOfBoundsException.class) 을 보장하고 message와 같은 예외에 대한 더 자세한 정보를 확인할 수 있기 때문에 @Test(expected=IndexOutOfBoundsException.class) 보다 좋습니다.

assertThatThrownBy(() ->
       {
         throw new Exception("boom!");
       })
    .isInstanceOf(Exception.class)
    .hasMessageContaining("boom");

Maven / Gradle 지침은 여기에 있습니다.





java system-properties