【问题标题】:How to use soft assertions in Mockito?如何在 Mockito 中使用软断言?
【发布时间】:2018-12-09 16:32:28
【问题描述】:

我知道我们可以使用ErrorCollectorsoft assertions(AssertJ 或 TestNG),它们不会立即通过单元测试。

它们如何与 Mockito 断言一起使用?或者如果他们不能,Mockito 是否提供任何替代方案?


代码示例

verify(mock).isMethod1();
verify(mock, times(1)).callMethod2(any(StringBuilder.class));
verify(mock, never()).callMethod3(any(StringBuilder.class));
verify(mock, never()).callMethod4(any(String.class));

问题

在这段代码的 sn-p 中,如果验证失败,则测试将失败,这将中止剩余的 verify 语句(它可能需要多次测试运行,直到显示此单元测试的所有失败,即费时)。

【问题讨论】:

    标签: mockito assertion verify errorcollector


    【解决方案1】:

    从 Mockito 2.1.0 开始,您可以使用VerificationCollector 规则来收集多个验证失败并一次报告。

    示例

    import static org.mockito.Mockito.verify;
    import org.junit.Rule;
    import org.mockito.junit.MockitoJUnit;
    import org.mockito.junit.VerificationCollector;
    
    // ...
    
        @Rule
        public final VerificationCollector collector = MockitoJUnit.collector();
    
    
        @Test
        public void givenXWhenYThenZ() throws Exception {
            // ...
            verify(mock).isMethod1();
            verify(mock, times(1)).callMethod2(any(StringBuilder.class));
            verify(mock, never()).callMethod3(any(StringBuilder.class));
            verify(mock, never()).callMethod4(any(String.class));
        }
    

    已知问题

    此规则不能与ErrorCollector 规则在同一测试方法中使用。在单独的测试中它工作正常。

    【讨论】:

      【解决方案2】:

      使用你可以做的软断言:

      softly.assertThatThrownBy(() -> verify(mock).isMethod1()).doesNotThrowAnyException();
      softly.assertThatThrownBy(() -> verify(mock, times(1)).callMethod2(any(StringBuilder.class))).doesNotThrowAnyException();
      softly.assertThatThrownBy(() -> verify(mock, never()).callMethod3(any(StringBuilder.class))).doesNotThrowAnyException();
      softly.assertThatThrownBy(() -> verify(mock, never()).callMethod4(anyString())).doesNotThrowAnyException();
      

      如果您的一个或多个 mockito 断言失败,它将触发异常,并且 softAssertion 将完成报告工作。

      【讨论】:

      • 在 Mockito 2 中,我不得不使用 softly.assertThatCode 来代替它。
      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多