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);
}
}