예외 테스트에 항상 Lambda 표현식을 사용해야합니까?

leif_good

나는 항상 주석으로 예외를 테스트했습니다.

@Test (expected = Exception.class)
public void test1() {
  methodToTest() // throws an exception
}

마침내 Java 8로 전환했고 람다 표현식을 발견했습니다. 이제 원하는 결과를 얻을 수있는 또 다른 옵션이 있습니다.

@Test
public void test2() {
  assertThrows(Exception.class, () -> methodToTest());
}

public static <X extends Throwable> Throwable assertThrows(
  final Class<X> exceptionClass, final Runnable block) {
    try {
      block.run();
    } catch(Throwable ex) {
      if (exceptionClass.isInstance(ex))
        return ex;
    }
    fail("Failed to throw expected exception");
    return null;
  }

두 번째 버전을 사용하면 단일 메서드를 더 정확하게 확인할 수 있으며 예상되는 예외를 throw 할 수있는 단일 테스트 내에서 다른 메서드에 대해 걱정할 필요가 없다는 것을 이해합니다. 또한 "assertThrows"메서드를 사용하면 모든 테스트가 단언에 대한 호출로 귀결되기 때문에 모든 테스트가 동일한 구조를 가질 수 있습니다.

이 두 가지 요점 외에 새로운 방식에 대한 찬성 주장이 있습니까? 나에게는 단일 테스트 내에서 단일 메서드 만 테스트하는 한 주석을 사용하는 것이 여전히 우수하다고 느낍니다.

날씬한

세 번째 방법 인 ExpectedExceptionjUnit 규칙을 놓쳤습니다 .

public class SimpleExpectedExceptionTest {
   @Rule
   public ExpectedException thrown= ExpectedException.none();

   @Test
   public void myMethod_throws_no_exception_when_passed_greeting() {
       fixture.myMethod("hello");
   }

   @Test
   public void myMethod_throws_MyException_when_passed_farewell() {
       thrown.expect(MyException.class);
       fixture.myMethod("goodbye");
   }
}

@Test (expected = ...)기대치가 메서드 호출에 더 가까워지기 때문에 버전 보다 명확 합니다.

우리가 사용했던 평범한 오래된 Java 버전도 있습니다.

try {
   fixture.myMethod("should throw");
   fail("Expected an exception");
} catch (MyException e) {
   // expected  
}

어느 것이 "더 나은"것인지는 전적으로 컨텍스트에 달려 있습니다. 보편적으로 채택하지 마십시오. 주어진 상황에서 가장 명확한 테스트를 제공하는 것을 선택하십시오.

람다 중심 스타일로 비 테스트 코드를 코딩하기 시작하면 람다 중심을 사용하고 싶을 것 assertThrows()입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

시스템 예외의 경우 Sentry 성능을 위해 어떤 상태를 사용해야합니까?

분류에서Dev

Lambda 표현식에서 동적 조건을 사용하려면 어떻게해야합니까?

분류에서Dev

Elmah에 예외 이상을 기록해야합니까?

분류에서Dev

예외를 포착하기 전에 항상 예외 유형을 알아야합니까?

분류에서Dev

모든 것에 항상 ConstraintLayout을 사용해야합니까?

분류에서Dev

인터벌 표현식 대신 "전통적인"awks (예 : nawk)에서 무엇을 사용해야합니까?

분류에서Dev

Notes 데이터베이스에 양식 / 하위 양식 (예 : 표시 전용) 변경 사항을 배포하려면 어떻게해야합니까?

분류에서Dev

항상 git LFS 파일의 텍스트 속성을 제외해야합니까?

분류에서Dev

데이터 액세스를 위해 MVC에서 항상 비동기 컨트롤을 사용해야합니까?

분류에서Dev

형식 외부에서 toString을 사용해야합니까?

분류에서Dev

Java8에서 스트림을 사용할 때 항상 Optional을 확인해야합니까?

분류에서Dev

Groovy, JUnit 및 Maven을 사용한 단위 테스트에서 예외를 "예상"한다고 선언하는 방법은 무엇입니까?

분류에서Dev

원이 항상 올바른 위치에 닿도록하려면 어떤 공식을 사용해야합니까?

분류에서Dev

JUnit을 5 이해 예외 테스트

분류에서Dev

JUnit을 5로 예상되는 예외 메시지에 대한 테스트

분류에서Dev

LINQ 쿼리 결과에서 "하나 이상의 개체가 IComparable을 구현해야합니다."예외

분류에서Dev

예 / 아니오 반환을 사용하여 Countif 수식에서 공백을 제외해야합니다.

분류에서Dev

중복 키 예외로 인해 Spring Boot Reactive 저장소 테스트가 항상 실패합니다.

분류에서Dev

클래스 상속을 사용해야합니까?

분류에서Dev

예상 예외가 구글 - 진실을 사용하여 발생되고 있음을 어떻게 테스트?

분류에서Dev

Lambda 표현식을 변수에 저장 하시겠습니까?

분류에서Dev

Orion Context Broker가 패턴 표현식이있는 쿼리에서 예상하는 모든 항목을 반환하지 않는 이유는 무엇입니까?

분류에서Dev

할당 또는 함수 호출을 예상하고 대신 삼항에 대한 표현식을 보았습니다.

분류에서Dev

어떤 상황에서 std :: function을 사용해야합니까?

분류에서Dev

숫자 형식은 항상 예외를 반환합니다.

분류에서Dev

HTML 속성에 예상 URL이 포함되어 있는지 테스트 할 때 호스트 이름을 무시하려면 어떻게해야합니까?

분류에서Dev

시험 예외 및 재 발현 예외에 유효성 검사 기능을 포함시켜야합니까?

분류에서Dev

Entity Framework Core에 기본 키가있을 때 항상 .FirstOrDefault () 대신 .Find ()를 사용해야합니까?

분류에서Dev

Python에서이 Lambda 표현식 사용법을 설명해주세요.

Related 관련 기사

  1. 1

    시스템 예외의 경우 Sentry 성능을 위해 어떤 상태를 사용해야합니까?

  2. 2

    Lambda 표현식에서 동적 조건을 사용하려면 어떻게해야합니까?

  3. 3

    Elmah에 예외 이상을 기록해야합니까?

  4. 4

    예외를 포착하기 전에 항상 예외 유형을 알아야합니까?

  5. 5

    모든 것에 항상 ConstraintLayout을 사용해야합니까?

  6. 6

    인터벌 표현식 대신 "전통적인"awks (예 : nawk)에서 무엇을 사용해야합니까?

  7. 7

    Notes 데이터베이스에 양식 / 하위 양식 (예 : 표시 전용) 변경 사항을 배포하려면 어떻게해야합니까?

  8. 8

    항상 git LFS 파일의 텍스트 속성을 제외해야합니까?

  9. 9

    데이터 액세스를 위해 MVC에서 항상 비동기 컨트롤을 사용해야합니까?

  10. 10

    형식 외부에서 toString을 사용해야합니까?

  11. 11

    Java8에서 스트림을 사용할 때 항상 Optional을 확인해야합니까?

  12. 12

    Groovy, JUnit 및 Maven을 사용한 단위 테스트에서 예외를 "예상"한다고 선언하는 방법은 무엇입니까?

  13. 13

    원이 항상 올바른 위치에 닿도록하려면 어떤 공식을 사용해야합니까?

  14. 14

    JUnit을 5 이해 예외 테스트

  15. 15

    JUnit을 5로 예상되는 예외 메시지에 대한 테스트

  16. 16

    LINQ 쿼리 결과에서 "하나 이상의 개체가 IComparable을 구현해야합니다."예외

  17. 17

    예 / 아니오 반환을 사용하여 Countif 수식에서 공백을 제외해야합니다.

  18. 18

    중복 키 예외로 인해 Spring Boot Reactive 저장소 테스트가 항상 실패합니다.

  19. 19

    클래스 상속을 사용해야합니까?

  20. 20

    예상 예외가 구글 - 진실을 사용하여 발생되고 있음을 어떻게 테스트?

  21. 21

    Lambda 표현식을 변수에 저장 하시겠습니까?

  22. 22

    Orion Context Broker가 패턴 표현식이있는 쿼리에서 예상하는 모든 항목을 반환하지 않는 이유는 무엇입니까?

  23. 23

    할당 또는 함수 호출을 예상하고 대신 삼항에 대한 표현식을 보았습니다.

  24. 24

    어떤 상황에서 std :: function을 사용해야합니까?

  25. 25

    숫자 형식은 항상 예외를 반환합니다.

  26. 26

    HTML 속성에 예상 URL이 포함되어 있는지 테스트 할 때 호스트 이름을 무시하려면 어떻게해야합니까?

  27. 27

    시험 예외 및 재 발현 예외에 유효성 검사 기능을 포함시켜야합니까?

  28. 28

    Entity Framework Core에 기본 키가있을 때 항상 .FirstOrDefault () 대신 .Find ()를 사용해야합니까?

  29. 29

    Python에서이 Lambda 표현식 사용법을 설명해주세요.

뜨겁다태그

보관