gpt4 book ai didi

java - 在 JUnit 的 setUp() 中初始化对象数组

转载 作者:行者123 更新时间:2023-11-30 06:44:52 25 4
gpt4 key购买 nike

我正在尝试使用 setUp 为我的测试方法初始化 JUnit 中的对象数组,但我做错了,因为测试抛出了错误(空指针异常)。当我在测试方法本身中初始化数组时,它们运行良好,但这显然并不理想。谁能指出我在这里做错了什么?

class MainTest {

Lord baratheons[];
Lord starks[];

//Setup & Teardown

@Before
static void setUp() throws Exception {
Lord baratheons[] = new Lord[3];
baratheons[0] = new Lord("Robert", 15);
baratheons[1] = new Lord("Renly", -5);
baratheons[2] = new Lord("Stannis", 30);
System.out.println("Baratheons initialised!");

Lord starks[] = new Lord[3];
starks[0] = new Lord("Robb", -60);
starks[1] = new Lord("Eddard", 0);
starks[2] = new Lord("Jon", 90);
System.out.println("Starks initialised!");
}

//Tests

@Test
void testGratefulLord() {
// Lord baratheons[] = new Lord[3];
// baratheons[0] = new Lord("Robert", 15);

int x = baratheons[0].getRelationship();
baratheons[0].giveFief();
assertEquals(baratheons[0].getRelationship(), (x+=10));

}

编辑:

注意除了遵循以下解决方案中概述的步骤之外,我还想为后代注意,我还使用了错误的标签进行设置。因为这是 JUnit 5,所以标记是 @BeforeEach。 @Before 是 JUnit 4 的标记,这就是未调用设置方法的原因。我希望这对 future 的用户有所帮助。

最佳答案

这里的问题是您要在 setUp() 方法中重新声明数组。这弄乱了您要使用的对象的范围。

setUp() 方法中删除 static,因为它不是必需的。

更改您的代码

Lord baratheons[] = new Lord[3];
Lord starks[] = new Lord[3];

baratheons = new Lord[3];
starks = new Lord[3];

最后,您需要将方法更改为public。为什么?因为 JUnit 在幕后使用反射,所以它们需要公开才能识别。可以查看 JUnit JavaDoc并看到它明确提到了一个 public void 方法

关于java - 在 JUnit 的 setUp() 中初始化对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50025583/

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