【问题标题】:Calling static method in test class(Junit)在测试类(Junit)中调用静态方法
【发布时间】:2020-04-15 07:17:55
【问题描述】:

我正在为我的项目编写 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失败了,说excepted但实际 另外我不能将静态方法更改为仅公开,因为它会影响代码的某些功能,而且由于我是 junit 的新手,我不知道如何解决这个问题。所以有人可以在这里帮助我 提前致谢!!

【问题讨论】:

  • 该列表的内容是什么?还有……你明白这是一个非常奇怪和毫无意义的方法吗?
  • 您在该方法中打印的大小的列表不是您返回的列表,那么为什么它会自动相同?
  • deliveryLinkedAllCSList 是一回事,CSList 是另一回事。因此,一个似乎包含 3 个元素这一事实绝对不能说明另一个包含多少元素。
  • @Mike Nakis 抱歉,我已经编辑了问题,请看一下,谢谢
  • @Stultuske 抱歉,我编辑了所提问题,这是一个错误,请看一下,谢谢

标签: java junit4


【解决方案1】:

您需要验证在运行时填充对象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);  
  }

【讨论】:

  • 这是在假设每个测试场景都需要该 List 的情况下进行的。您可能希望在测试方法本身中添加执行该设置的选项
  • 确实是@Stultuske。提出要求的开发人员应该考虑的事情。但你有一个很好的评论。投票赞成。
  • @Patrick Santana 我需要的是我不想在测试类中设置任何值,而不是我只想调用该函数操作以直接在测试类中调用,我也已编辑测试课上的东西请看一下,谢谢!!
  • @RajatKrishnan 我看不出有什么不同。有些东西设定了这个价值。如果你不调用什么集合,它总是 0。我想我们需要更多的细节来帮助你。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 2023-02-13
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多