为操作对象ArrayList的类编写单元测试(JUnit)。是否可以直接测试该ArrayList的内容,或者我只需要测试从ArrayLists返回格式化信息的函数并使用它来测试程序的其余部分? (以下代码)
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class HardeWareStore {
private ArrayList<Item> itemList;
public HardwareStore() throws IOException {
itemList = new ArrayList<>();
}
public String getAllItemsFormatted() {
return getFormattedItemList(itemList);
}
private String getFormattedItemList(ArrayList<Item> items) {
String text = " ------------------------------------------------------------------------------------\n" +
String.format("| %-10s| %-25s| %-20s| %-10s| %-10s|%n", "ID Number", "Name", "Category", "Quantity", "Price") +
" ------------------------------------------------------------------------------------\n";
for (int i = 0; i < items.size(); i++) {
text += String.format("| %-10s| %-25s| %-20s| %-10s| %-10s|%n",
items.get(i).getIdNumber(),
items.get(i).getName(),
items.get(i).getCategory(),
Integer.toString(items.get(i).getQuantity()),
String.format("%.2f", items.get(i).getPrice()));
}
text += " ------------------------------------------------------------------------------------\n";
return text;
}
public void addNewItem(String idNumber, String name, String category, int quantiy, float price) {
//If passed all the checks, add the item to the list
itemList.add(new Item(idNumber, name, category, quantiy, price));
System.out.println("Item has been added.\n");
}
(这是一项任务,因此不能以任何方式更改源代码)
测试类是否有任何方法可以知道&#34; itemList&#34;中的内容,因此我可以测试&#34; addNewItem&#34;方法,而不依赖于另一种方法,如&#34; getFormattedItemList&#34;?
答案 0 :(得分:1)
你可以使用反射。如果您需要访问私有字段,则需要从类的声明字段中获取它们,然后使它们可访问:
HardwareStore obj = new HardwareStore();
Field field = obj.getClass().getDeclaredField("itemList");
field.setAccessible(true);
ArrayList<Item> itemList = (ArrayList<Item>) field.get(obj);