Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为有作文的班级编写测试的最佳实践是什么_Java_Testing - Fatal编程技术网

Java 为有作文的班级编写测试的最佳实践是什么

Java 为有作文的班级编写测试的最佳实践是什么,java,testing,Java,Testing,假设我有类格式化程序 class Formatter { public FormattedData format(Map<String, Data> data) { return ..... } } 所以问题是——我想写测试。我为Formatter类编写了所有测试, 但是我应该如何测试收集器 因为我不应该依赖于收集器的实现,所以我需要复制格式化程序的所有测试,并将它们作为收集器的输入传递。当然,在测试中,我会将映射数据更改为数据作为输入数据类型,但无论如何都会有

假设我有类
格式化程序

class Formatter {
  public FormattedData format(Map<String, Data> data) {
    return .....
  }  
}
所以问题是——我想写测试。我为
Formatter
类编写了所有测试, 但是我应该如何测试
收集器


因为我不应该依赖于收集器的实现,所以我需要复制
格式化程序
的所有测试,并将它们作为
收集器
的输入传递。当然,在测试中,我会将
映射数据
更改为
数据
作为输入数据类型,但无论如何都会有大量的代码重复。我怎样才能避免呢

您使用mock,因此不依赖于格式化程序实现

@Test
@ExtendWith(MockitoExtension.class) // @RunWith(MockitoJUnitRunner.class) for JUnit 4
class CollectorTest {
    @InjectMocks
    private Collector sut;

    @Mock
    private Formatter formatter;

    public FormattedData getFormattedData() {
        FormattedData formatted = mock(FormattedData.class);
        when(formatter.format(any()).thenReturn(formatted);

        FormattedData result = sut.getFormattedData();

        // verify injected formatter was called
        verify(formatter).format(any());
        // verify the result of the formatter is returned by the collector
        assertThat(result).isSameAs(formatted);
    }
}

嘲笑是答案。将模拟的
格式化程序
传递给构造函数,然后检查是否调用了
格式化程序
上的适当方法。实际上,我不完全确定对于一个几乎不做任何事情(实际上没有逻辑)的类,是否真的需要测试。
@Test
@ExtendWith(MockitoExtension.class) // @RunWith(MockitoJUnitRunner.class) for JUnit 4
class CollectorTest {
    @InjectMocks
    private Collector sut;

    @Mock
    private Formatter formatter;

    public FormattedData getFormattedData() {
        FormattedData formatted = mock(FormattedData.class);
        when(formatter.format(any()).thenReturn(formatted);

        FormattedData result = sut.getFormattedData();

        // verify injected formatter was called
        verify(formatter).format(any());
        // verify the result of the formatter is returned by the collector
        assertThat(result).isSameAs(formatted);
    }
}