切换java的测试类

时间:2014-03-27 16:55:27

标签: java

我想在eclipse中为java中的以下代码创建一个测试类,我该怎么做?

public class SwitchDemo {
    public static void main(String[] args) {
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}

4 个答案:

答案 0 :(得分:1)

首先,让您的代码可测试。测试的最佳代码是一种获取参数并在不使用上下文的情况下返回结果的方法。这是你的情况!

public class SwitchDemo {
    public static void main(String[] args) {
        assert "August".equals(monthByNumber(8));
        assert "Invalid month".equals(monthByNumber(13));
    }

    private static String monthByNumber(int month) {
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                break;
            case 2:  monthString = "February";
                break;
            case 3:  monthString = "March";
                break;
            case 4:  monthString = "April";
                break;
            case 5:  monthString = "May";
                break;
            case 6:  monthString = "June";
                break;
            case 7:  monthString = "July";
                break;
            case 8:  monthString = "August";
                break;
            case 9:  monthString = "September";
                break;
            case 10: monthString = "October";
                break;
            case 11: monthString = "November";
                break;
            case 12: monthString = "December";
                break;
            default: monthString = "Invalid month";
                break;
        }
        return monthString;
    }
}

然后只使用assert或JUnit框架,就像回答Jakub Hr一样。

答案 1 :(得分:0)

现在你的代码包含硬编码值8,它总是返回八月。 但这并不意味着你不能写一个测试,尤其是使用TDD。

首先让我们先写一下测试:

public class SwitchDemoTest {

    @Test
    public void getMonthShouldReturnAugustWhenParameterIs8() {
        final String result = SwitchDemo.getMonth(8);
        Assert.assertEquals("August", result);
    }
}

之后您的代码无法编译,因此您必须添加接受getMonth参数的静态int方法。

你可以继续并写另一个测试,迫使你摆脱硬编码值等。

答案 2 :(得分:0)

public class SwitchDemo {
public static void main(String[] args) {
    int monthNum     = 8;
    String monthText = "";

    //Call #1
    monthText = getMonthText(monthNum);
    System.out.println(monthText);

    //Call #2
    System.out.println(getMonthText(monthNum));
}

//Extract to function for reuse
public static String getMonthText(int monthNumber){
    String monthString = "";
    switch (monthNumber) {
        //No need to break out of the case since return automatically breaks out of function
        case 1:  return "January";
        case 2:  return "February";
        case 3:  return "March";
        case 4:  return "April";
        case 5:  return "May";
        case 6:  return "June";
        case 7:  return "July";
        case 8:  return "August";
        case 9:  return "September";
        case 10: return "October";
        case 11: return "November";
        case 12: return "December";
        default: return "Invalid month";
    }
}

}

答案 3 :(得分:0)

使用另一种方法删除main()方法,如:

public static String monthOfYear(int month){
String monthString;
switch(month){
//your code until the last break; statement
}
return monthString;
}

您可以使用以下方式访问此内容: 是System.out.print(SwitchDemo.monthOfYear(8));其中SwitchDemo是包含的类 上面的方法