2 回答
TA贡献1797条经验 获得超6个赞
如果另一个类扩展了该类并重写了 method1 和 method2,则开发该类的人员有责任测试更改。
您可以模拟 method1 和 method2,但随后会将类的结构与测试用例耦合起来,从而使以后更难进行更改。
你在这里有责任测试你班级的行为。我看到有问题的方法被称为isUpdateNeeded. 那么让我们测试一下。我将按照我的想象填写课程。
class Updater {
Updater(String shouldUpdate, String reallyShouldUpdate) {...}
boolean method1() { return shouldUpdate.equals("yes"); }
boolean method2() { return reallyShouldUpdate.equals("yes!"); }
boolean isUpdateNeeded() { ...}
}
class UpdaterTest {
@Test
void testUpdateIsNeededIfShouldUpdateAndReallyShouldUpdate() {
String shouldUpdate = "yes";
String reallyShouldUpdate = "yes!"
assertTrue(new Updater(shouldUpdate, reallyShouldUpdate).isUpdateNeeded());
}
.... more test cases .....
}
请注意此测试如何在给定输入的情况下断言更新程序的行为,而不是它与某些其他方法的存在的关系。
如果您希望测试演示重写方法时会发生什么,请在测试中子类化 Updater 并进行适当的更改。
TA贡献2016条经验 获得超9个赞
所以,例如你有课:
public class BooleanBusiness {
public boolean mainMethod(){
return (firstBoolean() && secondBoolean());
}
public boolean firstBoolean(){
return true;
}
public boolean secondBoolean() {
return false;
}
}
然后你可以编写这样的测试:
import static org.junit.Assert.*;
import static org.mockito.Mockito.when;
import org.junit.Test;
import org.mockito.Mockito;
public class BooleanBusinessTest {
@Test
public void testFirstOption() {
BooleanBusiness booleanBusiness = Mockito.spy(BooleanBusiness.class);
when(booleanBusiness.firstBoolean()).thenReturn(true);
when(booleanBusiness.secondBoolean()).thenReturn(true);
assertTrue(booleanBusiness.mainMethod());
}
@Test
public void testSecondOption() {
BooleanBusiness booleanBusiness = Mockito.spy(BooleanBusiness.class);
when(booleanBusiness.firstBoolean()).thenReturn(true);
when(booleanBusiness.secondBoolean()).thenReturn(false);
assertFalse(booleanBusiness.mainMethod());
}
}
添加回答
举报