bugfix> java > 投稿

これは、ターゲットメソッドが例外をスローすることを期待するときにテストを記述する方法です。

@Test(expected = myExpectedException.class)
public void Test()
{
}

メソッドが例外をスローしない場合に成功するとどうなりますか?そのための属性はありますか?

回答 2 件
  • テストメソッドから例外がスローされた場合、テストはERROR状態であると見なされ、PASSEDテストとしてカウントされません。 つまり、特別な扱いは必要ありません。テストするメソッドを呼び出すだけです。

    例外を許可しないことについて明確にしたい場合は、 ExpectedException を追加できます  テストのルール:

    public class MyClassTest {
        // The class under test
        // Initialized here instead of in a @Before method for brevity
        private MyClass underTest = new MyClass();
        // Not really needed, just makes things more explicit
        @Rule
        public ExpectedException noExceptionAllowed = ExpectedException.none();
        @Test
        public void testSomeMethod() throws SomeException {
            // If an exception is thrown, the test errors out, and doesn't pass
            myClass.someMethod();
        }
    }
    
    

  • 例外をスローせず、同時に予期しないことは常に成功です ただし、メソッドに例外がスローされる可能性があるが、今回は例外ではないことをテストに明示的に伝えたい場合は、次のようなものを使用できます

    私のアーカイブでこのコードを見つけました。インターネットから参照したことを覚えています

    class MyAssertionRules {
        public static void assertDoesNotThrow(FailableAction action) {
            try {
                action.run();
            } catch (Exception ex) {
                throw new Error("Unexpected Exception Thrown", ex);
            }
        }
    }
    @FunctionalInterface
    interface FailableAction {
        void run() throws Exception;
    }
    
    

    その後、次のようにテストを実行できます

    public void testMethodUnderTest() {
        MyAssertionRules.assertDoesNotThrow(serviceUnderTest::methodUnderTest);
    }
    
    

あなたの答え