首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试Java 8谓词

单元测试Java 8谓词
EN

Stack Overflow用户
提问于 2016-12-13 09:13:49
回答 2查看 7.5K关注 0票数 2

我有一个这样的Java8谓词。我如何为此编写单元测试?

代码语言:javascript
复制
 Predicate<DTO> isDone = (dtO) ->
                (!dto.isFinished() &&
                !dto.isCompleted());

谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-12-13 16:21:18

我会这样测试它:

代码语言:javascript
复制
private final Predicate<DTO> isDone = (dto) ->
        (!dto.isFinished() && !dto.isCompleted());

@Test
public void a() throws Exception {
    // given
    DTO dto = new DTO(true, true);

    // when
    boolean result = isDone.test(dto);

    // then
    assertThat(result).isFalse();
}

@Test
public void s() throws Exception {
    // given
    DTO dto = new DTO(true, false);

    // when
    boolean result = isDone.test(dto);

    // then
    assertThat(result).isFalse();
}

@Test
public void d() throws Exception {
    // given
    DTO dto = new DTO(false, true);

    // when
    boolean result = isDone.test(dto);

    // then
    assertThat(result).isFalse();
}

@Test
public void f() throws Exception {
    // given
    DTO dto = new DTO(false, false);

    // when
    boolean result = isDone.test(dto);

    // then
    assertThat(result).isTrue();
}

@AllArgsConstructor
public static class DTO {
    private final boolean isFinished;
    private final boolean isCompleted;

    public boolean isFinished() {
        return isFinished;
    }

    public boolean isCompleted() {
        return isCompleted;
    }
}

将测试命名为:should_be_done_when_it_is_both_finished_and_completed,而不是asf

我认为DTO只是一个值对象,所以我宁愿创建真实的实例,而不是使用模拟。

票数 3
EN

Stack Overflow用户

发布于 2016-12-13 14:35:52

如果您有对谓词的引用(就像在您的示例中一样),那么我认为没有问题。以下是Mockito/JUnit的简单示例:

代码语言:javascript
复制
@Mock
private DTO mockDTO;

@Test
public void testIsDone_Finished_NotComplete()
{
    when(mockDTO.isFinished()).thenReturn(true);
    when(mockDTO.isCompleted()).thenReturn(false);

    boolean expected = false;
    boolean actual = isDone.test(mockDTO);

    Assert.assertEquals(expected, actual);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41112267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档