作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Car
类,其类别字段为 String
:
public class Car {
private String category;
public Car(String category) {
this.category = category;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
我有这个方法,它使用 contains()
方法根据 String
从数组中过滤出元素,以仅保留跑车。我知道这是个坏主意,只是想编写我的第一个单元测试。您能帮我了解从哪里开始吗?一般来说,测试环路过滤逻辑的最佳实践是什么。
private List<Car> filterOutEverythingExceptSportCars(List<Car> cars) {
List<Car> filteredCarsList = new ArrayList<>();
for (int i = 0; i < cars.size(); i++) {
if (cars.get(i).getCategory().contains("sport")) {
filteredCarsList.add(cars.get(i));
}
}
return filteredCarsList;
}
最佳答案
首先,您需要使您的方法可测试。在您的实现中,它是一个私有(private)实例方法。由于您没有使用实例中的任何其他内容,因此您可以将其设为包私有(private)静态方法:
static List<Car> filterOutEverythingExceptSportCars(List<Car> cars) {
List<Car> filteredCarsList = new ArrayList<>();
for (Car car: cars) {
if (!car.getCategory().contains("sport")) {
filteredCarsList.add(car);
}
}
return filteredCarsList;
}
现在您可以轻松编写带有要比较的输入和输出列表的单元测试:
@Test
public static void testFilterOutEverythingExceptSportCars() {
List<Car> cars = ...;
List<Car> actual = filterOutEverythingExceptSportCars(cars);
List<Car> expected = ...;
assertEquals(expected, actual);
}
您只需静态导入 filterOutEverythingExceptSportCars
方法,并将测试类与实现放在同一包中。
请注意,for循环的改进由您自行申请,而不是强制的。我也没有更改命名或 if 条件来匹配。只需编写您的测试并迭代您的实现,直到您最喜欢它为止......
关于java - 如何为基于字符串条件从数组中过滤元素的方法编写测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57662152/
我是一名优秀的程序员,十分优秀!