gpt4 book ai didi

Java - 需要有关如何对此类进行单元测试的建议

转载 作者:行者123 更新时间:2023-11-30 02:58:36 25 4
gpt4 key购买 nike

我在构建单元测试或测试用例方面并不是很有经验,现在我需要一些建议。我计划开设这门类(class),但我不确定单元测试的最佳方法是什么。我还没有写这个类,但它看起来像这样:

public class ClassName {

private ArrayList<Order> sortedOrderList1 = new ArrayList<>();
private ArrayList<Order> sortedOrderList2 = new ArrayList<>();

public void method1(Order order) {
//Modifies Order objects inside sortedOrderList1 or sortedOrderList2.
}

public method2(Order order) {
//Modifies Order objects inside sortedOrderList1 or sortedOrderList1.
}
}

Order列表内的对象有 pricequantity 。这些方法将进入列表并从 quantity 中减去。对于列表末尾的某些 Order 对象,还删除 quantity 的对象已达到0。

现在的问题是我不知道测试这些方法的最佳方法是什么。在我的 JUnit 类中,我将无法访问 private列表,并且方法本身没有返回值供我检查。测试此类方法的最佳实践方式是什么?

最佳答案

您应该为这两个公共(public)方法创建单元测试。如果这些方法对作为参数传递的订单对象进行更改,那么您的单元测试应该对该对象进行断言。您还应该检查sortedOrderLists 的状态。

要获取这些排序的顺序列表来检查它们,您将遇到一些问题。以下是三种可能的解决方案。

如果由于某种原因您不能或不想更改类实现,则为第一个选项。您必须使用反射来获取对这些私有(private)字段的引用。

第二个选项是将这些字段的可见性更改为 protected 。然后在同一个包中创建单元测试类。现在可以直接获取这些排序的顺序列表。

第三种可能是最好的选择是对这些字段使用依赖注入(inject)。依赖注入(inject)有许多不同的选项。您可以使用 CDI 或 Spring 之类的东西。但为了简单起见,您可以只使用普通的 java setter 或构造函数注入(inject)。只是不要在类(class)中新建这些列表。由于您注入(inject)了这些列表,现在它们甚至可以是私有(private)的。您的单元测试类将创建列表并将它们注入(inject)到您的测试类中。现在您有了这些私有(private)字段的引用,并且可以使用断言来检查它们。

构造函数注入(inject)示例:

public class ClassName {

private ArrayList<Order> sortedOrderList1;
private ArrayList<Order> sortedOrderList2;

public ClassName(ArrayList<Order> sortedOrderList1, ArrayList<Order> sortedOrderList2) {
this.sortedOrderList1 = sortedOrderList1;
this.sortedOrderList2 = sortedOrderList2;
}

public void method1(Order order) {
//Modifies Order objects inside sortedOrderList1 or sortedOrderList2.
}

public method2(Order order) {
//Modifies Order objects inside sortedOrderList1 or sortedOrderList1.
}
}

单元测试示例:

import org.junit.Assert;

public class ClassNameTest {

public void testMethod1() {
ArrayList<Order> list1 = new ArrayList<>();
ArrayList<Order> list2 = new ArrayList<>();
Order order = new Order();
ClassName testMe = new ClassName(list1, list2);
testMe.method1(order);
// Insert your assertions for example:
Assert.assertTrue(list1.contains(order));
}

}

关于Java - 需要有关如何对此类进行单元测试的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36521196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com