正在调用测试类(Junit)中的静态方法



我正在为我的项目编写junit测试用例,但我面临一个问题下面是我在一个java类(GraphNodes.java(中使用的一个方法

public static ArrayList<String> getCSList() {
System.out.println(CSList.size()); // Output : 3
return CSList; // returns 3 elements in list
}

现在这是我的Junit 测试课

@Test
public void checkCSListCount(){
int actual= GraphNodes.getCSList().size(); // My exceptation here is 3 but in console it shows 0
int excepted = 3;
assertEquals(excepted,actual);  
}

我的junit说excessed<3> 但实际<0>此外,我不能将静态方法更改为仅public,因为它会影响代码的某些功能,而且由于我是junit的新手,我不知道如何解决这个问题。所以有人能在这里帮我吗提前感谢!!

您需要验证如何在运行时填充对象CSList(),并在运行测试时执行完全相同的操作。

一种选择是在测试中有一个@BeforeEach method,它将设置测试期间所需的值。

@BeforeEach
public void setUp() {
GraphNodes.setCSList(Arrays.asList("A","B","C"));
}

@Test
public void checkCSListCount(){
int actual= GraphNodes.getCSList().size();
int excepted = 3;
assertEquals(excepted,actual);  
}

我认为您正在尝试编写一个集成测试。因此,在检查列表大小之前,您应该调用该方法,该方法将用您的3个元素填充列表。如果所有的逻辑都在你的主方法中,你应该把它提取到它自己的方法中。

最新更新