【问题标题】:JUnits check IF Else conditionJUnit 检查 IF Else 条件
【发布时间】:2021-05-28 13:44:50
【问题描述】:

代码文件 - originalFile.java

private setValueMethod(param1, param2) {
    if (param1.getIsMale()) { // Its a boolean 
        param1.setCity(param2);
    } else { 
        param1.setCity(param1.getOtherCity());
    }
}

originalFileTest.java

@Test
public void testSetValueMethod() {
    // some previous line setting mock value
    when(param1.getIsMale()).then ('.... How to do what i have done in real code file...')
    // How to implement if/else in JUnit tests
}

如何在 JUnits 中实现 if/else?

【问题讨论】:

  • '如何在 JUnit 测试中实现基本的 if/else?' - 不清楚你的意思。
  • @Lesiak - 我的意思是如何放置条件测试用例
  • 1.您设置param1 的状态,以便执行其中一个分支。这可能是显而易见的。 2. 你可能根本不需要嘲笑——如果param1param2 很容易构造,那么在真实对象上检查setValueMethod 可能更容易。 3. setValueMethod 是私人的。您通常不会测试私有方法。您可以通过公共接口对其进行测试。更改为包私有是可以接受的。由于该方法似乎不依赖于对象状态,因此更改为静态可能是可以接受的。另一种技术是将方法提取到另一个对象(但这样一个微不足道的对象不值得)

标签: java junit mockito


【解决方案1】:

您应该考虑编写两个测试。

@Test
public void shouldUseOtherCityOfParam1() {
    ClassUnderTest classUnderTest = new ClassUnderTest();
    Param1 param1 = mock(Param1.class);
    Param2 param2 = mock(Param2.class);
    Param2 otherCity = mock(Param2.class);
    when(param1.getIsMale()).thenReturn(false);
    when(param1.getOtherCity()).thenReturn(otherCity);

    classUnderTest.setValueMethod(param1, param2);

    verify(param1).setCity(eq(otherCity));
}

@Test
public void shouldUseParam2() {
    ClassUnderTest classUnderTest = new ClassUnderTest();
    Param1 param1 = mock(Param1.class);
    Param2 param2 = mock(Param2.class);
    when(param1.getIsMale()).thenReturn(true);

    classUnderTest.setValueMethod(param1, param2);

    verify(param1).setCity(eq(param2));
}

【讨论】:

  • 完美答案 :) 但是我的课程是私人课程,我也不能参考它
  • @AEmilia 哦,我明白了。 在我看来,您不应该测试私有方法。相反,您应该测试一个调用此私有方法的公共方法。但如果你真的想要,你可以使用Powermock?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多