单元测试的新手,正在寻找一种对布尔方法进行单元测试的方法,该方法已通过其他两个方法的结果进行了验证。
protected boolean isUpdateNeeded(){
return (method1() && method2());
}
在此示例中,其他方法如下所示。
protected boolean method1() {
return false;
}
protected boolean method2() {
return true;
}
但是如果需要,可以重写这两种方法。如果这个时候真的很重要
所以我在测试背后的想法是这样的。找到一种方法将true / false传递给method1或method2,以满足所需的可能结果。
@Test
public void testCheckToSeeIfUpdateIsNeeded(){
assertTrue('how to check here');
asserFalse('how to check here');
assertIsNull('was null passed?');
}
答案 0 :(得分:4)
如果另一个类对此进行了扩展并覆盖了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的行为,而不是它与其他方法的存在之间的关系。
如果您希望测试演示您重写方法会发生什么,请在测试中子类化Updater并进行适当的更改。
答案 1 :(得分:2)
例如,您有上课:
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());
}
}