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