猿问

基于其他方法返回类型的单元测试布尔方法

单元测试新手,我正在寻找一种对布尔方法进行单元测试的方法,该方法已通过其他两种方法结果进行验证。


 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?');  


 }


倚天杖
浏览 97回答 2
2回答

FFIVE

如果另一个类扩展了该类并重写了 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 并进行适当的更改。

慕沐林林

所以,例如你有课: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());  }}
随时随地看视频慕课网APP

相关分类

Java
我要回答