JUnit : 테스트 예외가 작동하지 않음 (AssertionError : 예외가 발생하더라도 예상되는 예외)

asmb

클래스에서 예외를 테스트하려고합니다. 나는 몇 가지 다른 방법을 시도해 왔지만 아무것도 작동하지 않습니다. 내가 여기서 뭘 잘못하고 있니?

테스트하려는 클래스 PrimeNumber.java :

public class PrimeNumber {

    static final Logger LOG = LogManager.getLogger("Log");

    private String primeNumberStr;

    public PrimeNumber(String primeNumberStr) {
        this.primeNumberStr = primeNumberStr;
    }

    public String getPrimeResult() {
        String resultStr = "";
        try {
            // Convert user input to int
            int primeNumberInt = Integer.parseInt(primeNumberStr);
            // Beginning of return message
            resultStr += primeNumberInt + " is ";
            // Add "not" if it's not a prime
            if (!Primes.isPrime(primeNumberInt))
                resultStr += "NOT ";
            // End return message
            resultStr += "a prime";
            // If not a valid number, catch
        } catch (NumberFormatException e) {
            // Log exception
            LOG.warn("NumberFormatException" + e.getMessage());
            // If empty user input
            if (primeNumberStr.length() == 0)
                resultStr += "No number inserted";
            // Else not empty but not valid
            else
                resultStr += primeNumberStr + " is not a valid number";
            resultStr += ". Only numbers without decimals are accepted.";
        }

        return resultStr;
    }

}

그리고 이제 내가 테스트하려고 시도한 것 :

주석 포함

@Test(expected = NumberFormatException.class)
public void testNumberFormatExceptionBeingThrown() {
    PrimeNumber primeNumber = new PrimeNumber("6dg");
    primeNumber.getPrimeResult();
}

실패한 테스트 결과 :

java.lang.AssertionError: Expected exception: java.lang.Exception

JUnit 규칙 사용 :

@Rule public ExpectedException thrown = ExpectedException.none();

@Test(expected = NumberFormatException.class)
public void testNumberFormatExceptionBeingThrown() {
    thrown.expect(NumberFormatException.class);
    thrown.expectMessage("For input string: \"a21\"");
    PrimeNumber primeNumber = new PrimeNumber("a21");
    primeNumber.getPrimeResult();
}

결과 :

java.lang.AssertionError: Expected test to throw (an instance of java.lang.NumberFormatException and exception with message a string containing "For input string: \"a21\"")
at org.junit.Assert.fail(Assert.java:88)
at org.junit.rules.ExpectedException.failDueToMissingException(ExpectedException.java:263)
at org.junit.rules.ExpectedException.access$200(ExpectedException.java:106)
at org.junit.rules.ExpectedException$ExpectedExceptionStatement.evaluate(ExpectedException.java:245)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

그리고 Getz

모든 것이 정상적으로 작동합니다. 메서드에서 예외가 발생 하지 않도록 성공적으로 막을 수있었습니다 . 당신은 성공적으로 그들이하는지 테스트 할 수있었습니다 던져 예외.

두 가지를 동시에하는 것은 말이되지 않습니다. 잘못된 인수가 주어 졌을 때 각 메서드에서 예외를 throw 할지 여부 를 결정해야합니다 .

당신이 경우 잘못된 인수가 주어 졌을 때 예외를 던지는 방법을 원하고 잡아 예외를 처리, 그냥이 슬로우하지 않습니다. 그런 다음 위에서 한 것처럼 메서드가 해당 예외를 throw하는지 테스트합니다.

잘못된 인수가 주어 졌을 때 메서드가 예외를 throw 하지 않도록 하려면 대신 수행 할 작업을 결정하십시오. 그런 다음 방법이 원하는대로 작동하는지 테스트합니다. 예외가 발생하면 테스트가 실패합니다.


즉, 수업에서 숫자를 처리하는 방법은별로 의미가 없습니다. 당신은 그것들을 Strings 로 가져오고 s로 저장하고 Strings로 반환 String하지만, 작업 할 때마다 s로 앞뒤로 변환합니다 int. int애초에 어디서나 사용하지 않는 이유는 무엇 입니까?

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

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

분류에서Dev

junit에서 예외가 발생하고 포착되는지 테스트하는 방법

분류에서Dev

Django 2.2 ORM 제외가 예상대로 작동하지 않음

분류에서Dev

예외 클래스 코드가 작동하지 않습니다.

분류에서Dev

예외 클래스가 작동하지 않습니다.

분류에서Dev

ExecuteScalar "지정된 캐스트가 유효하지 않음"예외

분류에서Dev

스트라이프 예외가 작동하지 않습니다. 예외 오류 대신 laravel 오류가 발생합니다.

분류에서Dev

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

분류에서Dev

루프에서 예상되는 예외를 처리하는 Junit

분류에서Dev

Google API HTTP 예외 처리가 작동하지 않음 (python)

분류에서Dev

SharePoint CSOM에서 ExecuteQuery에서 예상 된 예외가 발생하지 않음

분류에서Dev

파생 클래스를 역 직렬화 할 때 XmlSerializer 예외 (<Derived xmlns = ''>가 예상되지 않음)

분류에서Dev

JUnit 예상 예외

분류에서Dev

예약 된 실행기 서비스는 한 번만 실행되며 예외가 발생하지 않습니다.

분류에서Dev

MVC MailMessage가 전송되지 않음, 예외 발생 없음

분류에서Dev

분석 v4 포착되지 않은 예외가 작동하지 않음

분류에서Dev

유사한 rx 연산자의 예외로 인해 처리되지 않은 예외가 발생하는 반면 SelectMany에서 예외가 발생한 후에도 프로세스가 여전히 살아있는 이유는 무엇입니까?

분류에서Dev

Swiftmailer가 작동하지 않는 블록 예외 포착

분류에서Dev

예상대로 작동하지 않는 C #의 예외

분류에서Dev

Webapi 2 전역 예외 처리가 발생하지 않음

분류에서Dev

MVC GetAsync가 작동하지 않고 예외가 발생하지 않습니다.

분류에서Dev

Laravel 예외가 포착되지 않음

분류에서Dev

테스트를 처리하는 JUnit 예외

분류에서Dev

Micronaut : Mockito 테스트를 실행하는 동안 예외 처리기가 호출되지 않습니다.

분류에서Dev

WCF 서비스에서 예외가 발생하지만 클라이언트가 예외를받지 못함

분류에서Dev

예상대로 작동하지 않는 시도 / 예외 : "예외"오류 메시지가 통과 결과에 추가됩니다.

분류에서Dev

이 예외 오류가 발생하는 이유-처리되지 않은 예외 발생 : 쓰기 액세스 위반. 머리는 0xFFFFFFFFCBB1E630

분류에서Dev

예외가 발생하지 않았기 때문에 단순 NUnit 테스트가 실패했습니다 (테스트 외부가 발생 함).

분류에서Dev

self.assertRaisesRegex가 작동하지 않음, "위의 예외를 처리하는 동안 다른 예외가 발생했습니다."

Related 관련 기사

  1. 1

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

  2. 2

    junit에서 예외가 발생하고 포착되는지 테스트하는 방법

  3. 3

    Django 2.2 ORM 제외가 예상대로 작동하지 않음

  4. 4

    예외 클래스 코드가 작동하지 않습니다.

  5. 5

    예외 클래스가 작동하지 않습니다.

  6. 6

    ExecuteScalar "지정된 캐스트가 유효하지 않음"예외

  7. 7

    스트라이프 예외가 작동하지 않습니다. 예외 오류 대신 laravel 오류가 발생합니다.

  8. 8

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

  9. 9

    루프에서 예상되는 예외를 처리하는 Junit

  10. 10

    Google API HTTP 예외 처리가 작동하지 않음 (python)

  11. 11

    SharePoint CSOM에서 ExecuteQuery에서 예상 된 예외가 발생하지 않음

  12. 12

    파생 클래스를 역 직렬화 할 때 XmlSerializer 예외 (<Derived xmlns = ''>가 예상되지 않음)

  13. 13

    JUnit 예상 예외

  14. 14

    예약 된 실행기 서비스는 한 번만 실행되며 예외가 발생하지 않습니다.

  15. 15

    MVC MailMessage가 전송되지 않음, 예외 발생 없음

  16. 16

    분석 v4 포착되지 않은 예외가 작동하지 않음

  17. 17

    유사한 rx 연산자의 예외로 인해 처리되지 않은 예외가 발생하는 반면 SelectMany에서 예외가 발생한 후에도 프로세스가 여전히 살아있는 이유는 무엇입니까?

  18. 18

    Swiftmailer가 작동하지 않는 블록 예외 포착

  19. 19

    예상대로 작동하지 않는 C #의 예외

  20. 20

    Webapi 2 전역 예외 처리가 발생하지 않음

  21. 21

    MVC GetAsync가 작동하지 않고 예외가 발생하지 않습니다.

  22. 22

    Laravel 예외가 포착되지 않음

  23. 23

    테스트를 처리하는 JUnit 예외

  24. 24

    Micronaut : Mockito 테스트를 실행하는 동안 예외 처리기가 호출되지 않습니다.

  25. 25

    WCF 서비스에서 예외가 발생하지만 클라이언트가 예외를받지 못함

  26. 26

    예상대로 작동하지 않는 시도 / 예외 : "예외"오류 메시지가 통과 결과에 추가됩니다.

  27. 27

    이 예외 오류가 발생하는 이유-처리되지 않은 예외 발생 : 쓰기 액세스 위반. 머리는 0xFFFFFFFFCBB1E630

  28. 28

    예외가 발생하지 않았기 때문에 단순 NUnit 테스트가 실패했습니다 (테스트 외부가 발생 함).

  29. 29

    self.assertRaisesRegex가 작동하지 않음, "위의 예외를 처리하는 동안 다른 예외가 발생했습니다."

뜨겁다태그

보관