【发布时间】:2020-11-03 20:30:14
【问题描述】:
任务:创建实现通过测试单元的累加器的类 IntegerAccumulator
我在下面尝试的代码不起作用,因为测试单元在使用 add 方法时仅使用 1 个参数。我得到的错误代码主要是由于参数。
我试过了:
class IntegerAccumulator implements Accumulator{
void add(Function function, DataStrore store){
}
T getResult(){
return null;
}
}
以下是提供的代码: 主要:
public class Main
{
public static void main(final String[] argv)
{
final DataStore<Integer> intStore;
final DataStore<String> strStore;
final Accumulator<Integer, Integer> intAccumulator;
final Accumulator<String, String> strAccumulator;
intStore = new MemoryDataStore<>(1, 3);
intStore.setValueAt(0, 0, 10);
intStore.setValueAt(0, 1, 200);
intStore.setValueAt(0, 2, 3);
strStore = new MemoryDataStore<>(1, 3);
strStore.setValueAt(0, 0, "Hello");
strStore.setValueAt(0, 1, "Evil");
strStore.setValueAt(0, 2, "World");
intAccumulator = new IntegerAccumulator();
intAccumulator.add((value) -> value, intStore);
System.out.println(intAccumulator.getResult());
strAccumulator = new StringAccumulator();
strAccumulator.add((value) -> value, strStore);
System.out.println(strAccumulator.getResult()); // Hello, Evil, World
strStore.setValueAt(0, 0, "Bye");
strStore.setValueAt(0, 1, null);
strStore.setValueAt(0, 2, "Bye!"); // Hello, Evil, World, Bye, , Bye!
strAccumulator.add((value) -> value, strStore);
System.out.println(strAccumulator.getResult());
}
}
public interface Accumulator<D, T>
{
void add(Function<D, T> function, DataStore<D> store);
T getResult();
}
public interface DataStore<T>
{
void setValueAt(int row, int col, T value);
T getValueAt(int row, int col);
int getRows();
int getCols();
}
class IntegerAccumulatorTest
{
@Test
void add()
{
final IntegerAccumulator a;
final IntegerAccumulator b;
a = new IntegerAccumulator();
b = new IntegerAccumulator();
assertThat(a.getResult(), equalTo(0));
assertThat(b.getResult(), equalTo(0));
a.add(1);
assertThat(a.getResult(), equalTo(1));
assertThat(b.getResult(), equalTo(0));
a.add(1);
assertThat(a.getResult(), equalTo(2));
assertThat(b.getResult(), equalTo(0));
a.add(3);
assertThat(a.getResult(), equalTo(5));
assertThat(b.getResult(), equalTo(0));
a.add(null);
assertThat(a.getResult(), equalTo(5));
assertThat(b.getResult(), equalTo(0));
a.add(-6);
assertThat(a.getResult(), equalTo(-1));
assertThat(b.getResult(), equalTo(0));
}
}
【问题讨论】:
-
所以你的主要工作是
intAccumulator.add((value) -> value, intStore);。您是否看到使用a.add(1);的非工作单元测试有任何区别(例如传递 int-value1而不是像(value) -> value这样的 功能;或缺少 数据存储) ? datastore 是累加器从中读取其值以累积到结果的源。 -
是的,我已经尝试更改 Main 类,但缺少一个参数时会引发错误。
-
测试、实现
IntegerAccumulator和接口Accumulator目前不适合。您的任务将哪一个作为修复?你至少需要调整一个才能工作! -
给出的是测试和累加器接口。 IntegerAccumulator 是我需要创建以适应 Test 和 Accumulator 的一个。
-
不清楚。并且您绑定了实现
IntegerAccumulator...您可以将您的代码发布为minimal reproducible example(即使它不起作用)。我相信我们会让它工作的????
标签: java generics lambda interface testunit