minte9
LearnRemember



Exceptions

JUnit @Test supports an argument that specify an expected exception.
T 
/**
 * Expected exception parameter ...
 * 
 * You can pass an expected exception into the ...
 * Test annotation definition.
 */

package com.minte9.junit.exceptions;

import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;

public class Expected {

    @Test public void no_squares() { // Failed
        Squares squares = new Squares();
        squares.average(); 
            // ArithmeticException: / by zero
    }

    @Test(expected = ArithmeticException.class)
    public void no_squares_expected() {
        Squares squares = new Squares(); // Passed
        squares.average();  
    }

    @Test public void average() { // Passed
        Squares squares = new Squares();
        squares.add(3); // 9
        squares.add(5); // 25
        assertEquals(squares.average(), 17);
    }
}

class Squares {
    private List<Integer> squares = new ArrayList<>();

    public void add(int x) {
        squares.add(x * x); 
    }

    public int average() throws ArithmeticException {
        int total = squares.stream().mapToInt(Integer::intValue).sum();
        return total / squares.size();
    }
}
Test App exception when no args are provided.
T 
/**
 * Testing an application with no argumets in main()
 */

package com.minte9.junit.exceptions;
import org.junit.Test;

public class NoArgs {

    @Test public void no_args() { // Failed
        App.main(new String[] {}); 
            // ArrayIndexOutOfBoundsException
    }

    @Test(expected = ArrayIndexOutOfBoundsException.class)
    public void no_args_expected() {
        App.main(new String[] {}); // Passed
    }

    @Test public void args() {
        App.main(new String[] {"run"}); // Passed
    }
}

class App {
    public static void main(String[] args) {
        String action = args[0];
        System.out.println(action);
    }
}



  Last update: 308 days ago