web-dev-qa-db-ja.com

assertEqual NullPointerExceptionのJUnitテスト

テストケースにtrueの出力がない理由がわかりません。どちらの場合もNullPointerExceptionを与える必要があります。

私はこれを試してみました(まったく同じではありませんが、trueが出力されます):

    String nullStr = null;

//@Test
public int NullOutput1() {
    nullStr.indexOf(3);
    return 0;
}

//@Test(expected=NullPointerException.class)
public int NullOutput2() {
    nullStr.indexOf(2);
    return 0;
}

@Test(expected=NullPointerException.class)
public void testboth() {
    assertEquals(NullOutput1(), NullOutput2());
}

ランナー:

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunnerStringMethods {
    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(TestJunitMyIndexOf.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
        System.out.println(result.wasSuccessful());
    }
}

方法:

public static int myIndexOf(char[] str, int ch, int index) {
        if (str == null) {
            throw new NullPointerException();
        }
        // increase efficiency
        if (str.length <= index || index < 0) {
            return -1;
        }
        for (int i = index; i < str.length; i++) {
            if (index == str[i]) {
                return i;
            }
        }
        // if not found
        return -1;
    }

テストケース:

@Test(expected=NullPointerException.class)
public void testNullInput() {
    assertEquals(nullString.indexOf(3), StringMethods.myIndexOf(null, 'd',3));
}
12
Liondancer

ここでfailを使用したいと思います:

@Test(expected=NullPointerException.class)
public void testNullInput() {
    fail(nullString.indexOf(3));
}

必要に応じて、import static org.junit.Assert.fail;を必ず追加してください。

20
David Koelle

Java 8およびJUnit 5(Jupiter))では、次のように例外をアサートできます。org.junit.jupiter.api.Assertions.assertThrowsを使用する

public static <T extends Throwable> T assertThrows(Class <T> expectedType、Executable executable)

指定された実行可能ファイルを実行すると、expectedTypeの例外がスローされ、その例外が返されることを表明します。

例外がスローされない場合、または異なるタイプの例外がスローされる場合、このメソッドは失敗します。

例外インスタンスに対して追加のチェックを実行したくない場合は、戻り値を無視してください。

@Test
public void itShouldThrowNullPointerExceptionWhenBlahBlah() {
    assertThrows(NullPointerException.class,
            ()->{
            //do whatever you want to do here
            //ex : objectName.thisMethodShoulThrowNullPointerExceptionForNullParameter(null);
            });
}

このアプローチでは、org.junit.jupiter.apiの機能インターフェイスExecutableを使用します。

参照:

4
prime