Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何测试这个?_Java_Unit Testing_Junit - Fatal编程技术网

Java 我如何测试这个?

Java 我如何测试这个?,java,unit-testing,junit,Java,Unit Testing,Junit,我有这门课: public class EmployeeHours { public static final Integer STEP = 60; //more fields private Integer minutes; public void increaseMinutes(){//increase minutes by STEP} public void decreaseMinutes(){//decrease minutes by ST

我有这门课:

public class EmployeeHours {

    public static final Integer STEP = 60;

    //more fields
    private Integer minutes;

    public void increaseMinutes(){//increase minutes by STEP}

    public void decreaseMinutes(){//decrease minutes by STEP, 0 whether negative}

}
我想测试一下:

    @Test
    public void shouldBeZeroSinceMinutesCantBeNegative() {
        int initialMinutes = 10;
        EmployeeHours employeeHours = new EmployeeHours(null, 1, initialMinutes);
        employeeHours.decreaseMinutes();
        assertThat(employeeHours.getMinutes(), is(0));
    }
这个测试通过了,因为我知道
STEP
大于10。但是如果我将
步骤
更改为5,例如,它将不会通过

我应该在测试中控制这种情况吗?我的意思是:

if (STEP > initialMinutes) 
then expectSomething
else expectAnotherThing

这是一种好的做法吗?如何改进我的测试?

是的,您应该改进您的测试,使其尽可能通用

由于
STEP
是一个公共字段,因此可以将
initialMinutes
变量初始化为类似
STEP-1
的值。这将正确地测试减少分钟数最终为负值且应设置为0的情况

@Test
public void shouldBeZeroSinceMinutesCantBeNegative() {
    int initialMinutes = EmployeeHours.STEP - 1;
    EmployeeHours employeeHours = new EmployeeHours(null, 1, initialMinutes);
    employeeHours.decreaseMinutes();
    assertThat(employeeHours.getMinutes(), is(0));
}

+我认为这是个好办法。在创建测试时,我会说添加条件并不是一个好主意,否则最终可能会增加复杂性。我通常争取简单的测试,没有条件,在这个问题中,我试图让变量/测试方法名称表达我想要表达的内容。