gpt4 book ai didi

java - 最佳实践 : Initialize JUnit class fields in setUp() or at declaration?

转载 作者:IT老高 更新时间:2023-10-28 11:21:37 24 4
gpt4 key购买 nike

我应该像这样在声明时初始化类字段吗?

public class SomeTest extends TestCase
{
private final List list = new ArrayList();

public void testPopulateList()
{
// Add stuff to the list
// Assert the list contains what I expect
}
}

或者像这样在setUp()中?

public class SomeTest extends TestCase
{
private List list;

@Override
protected void setUp() throws Exception
{
super.setUp();
this.list = new ArrayList();
}

public void testPopulateList()
{
// Add stuff to the list
// Assert the list contains what I expect
}
}

我倾向于使用第一种形式,因为它更简洁,并且允许我使用最终字段。如果我不需要使用 setUp() 方法进行设置,我还应该使用它吗?为什么?

说明:JUnit 将为每个测试方法实例化一次测试类。这意味着 list 将在每个测试中创建一次,无论我在哪里声明它。这也意味着测试之间没有时间依赖性。因此,使用 setUp() 似乎没有任何优势。但是 JUnit 常见问题解答中有很多在 setUp() 中初始化空集合的示例,所以我认为这一定是有原因的。

最佳答案

如果您特别想知道 JUnit 常见问题解答中的示例,例如 basic test template ,我认为这里展示的最佳实践是 被测类 应该在您的 setUp 方法(或测试方法)中实例化。

当 JUnit 示例在 setUp 方法中创建 ArrayList 时,它们都会继续测试该 ArrayList 的行为,例如 testIndexOutOfBoundException、testEmptyCollection 等。有人编写类(class)并确保其正常运行的观点。

在测试您自己的类时,您可能应该这样做:在 setUp 或测试方法中创建您的对象,这样如果您以后破坏它,您将能够获得合理的输出。

另一方面,如果您在测试代码中使用 Java 集合类(或其他库类),这可能不是因为您想测试它——它只是测试夹具的一部分。在这种情况下,您可以放心地假设它按预期工作,因此在声明中对其进行初始化不会有问题。

不管怎样,我在一个相当大的、几年前的 TDD 开发的代码库上工作。我们习惯性地在测试代码的声明中初始化东西,在我从事这个项目的一年半里,它从未引起过问题。所以至少有一些轶事证据表明这样做是合理的。

关于java - 最佳实践 : Initialize JUnit class fields in setUp() or at declaration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/512184/

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