当前位置: 首页 > 知识库问答 >
问题:

从junit测试类重置私有静态int

卫松
2023-03-14

我正在为一个叫Student的班写一些junit测试。基本上,每个学生都有一个studentNum,它被设置为一个迭代器,迭代器是一个私有静态int。每次创建新学生时,studentNum都会递增。

我对一个函数进行了几个测试,该函数从传入的学生数组列表中获取studentNum为1的学生。然而,每次我在一个新测试中创建一个新的学生数组列表时,studentNum从上一个测试的studentNum停止的地方开始。因此,第一个测试将使学生数量从0到5,第二个测试将使学生数量从6到11。

我想知道是否有办法重置测试类中的私有静态studentNum整数,以便每次测试都从0开始?任何帮助都将不胜感激。

共有3个答案

慕鸿波
2023-03-14

请查看注释的前后。在每个测试用例运行之前/之后调用这样注释的方法。你可以在那里重置数据。

@Before
public void setup(){

}
东方新霁
2023-03-14

每个学生都有一个studentNum,它是一个私有静态int

这种说法毫无意义。如果学生对象的每个实例都有自己的id,则根据定义,id字段不应是静态的。

仲孙鸿飞
2023-03-14

您发现这一点很难测试,这是一个警告信号,表明您可能需要重新考虑您的设计。问问自己:为什么学生要负责生成一个唯一的id?

如果您将id生成逻辑(即使它就像递增单个计数器一样简单)分离到一个单独的类中,突然您将能够在测试学生时模拟该类并让它返回任何id你想要在你的测试中。

 类似资料:
  • 问题内容: 我有一组JUnit测试,这些测试调用Java程序上的main方法,传入args并检查输出。没关系。 但是,如果我正在测试的程序具有更改的静态值,则测试之间它们将保持不变。这会引起问题。我无法控制正在测试的程序是什么,也无法控制用于静态字段的名称。 如何确保单元测试可以正常运行,就好像它是从头开始运行程序一样,而无需保留这些静态字段。是否可以通过某种方式重设它们? 如果没有,我将不得不启

  • 我正在为我的项目编写junit测试用例,但我在这里面临一个问题,就是我在我的一个java类(GraphNodes.java)中使用的方法 这是我的Junit测试类 我的junit失败了,它说excepted<3>但actual<0>而且我不能将静态方法仅改为public,因为这会影响代码的某些功能,而且由于我是junit的新手,所以我不知道如何解决这一问题。所以有人能在这里帮助我吗?谢谢!!

  • 我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。 假设我们有一个具有静态私有内部类的类: IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object)  私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个

  • 问题内容: 我正在使用JUnit4和Cobertura仅使用静态方法测试助手类。测试方法是一项容易的任务,并且已经完成。 但是,cobertura显示该类没有被测试完全覆盖,因为它没有在任何地方实例化。 我不想创建此类的实例(它是一个帮助程序类),因此第一个解决方案是隐藏构造函数(这通常是帮助程序类的好方法)。 然后,cobertura抱怨测试未涵盖空的私有构造函数。 有什么解决方案可以在这种情况

  • 我有一个关于静态方法访问的问题。我有一个类,其中有4个静态方法。如代码所示: } 我正在从下面的代码调用来自onLoadShipperDetailsListCtrl()的setSortingEnable()方法: } 因此,如果我从其他类调用setSortingEnabled()方法,我会认为它是公共的,而其他方法是私有的,但它会给我一个错误:Java . lang . nosuchmethode

  • 我正在为我的一个应用程序编写单元测试,作为一个很好的实践,我试图使我的类中的所有方法尽可能私有,所以我最终可能会使用大部分私有方法的类,很少使用公共方法,有时还会调用一些静态方法(我的其他类或一些文本,等等) 我想知道如何测试我试图只依赖Mockito和JUnit的所有类,因为Robolectric和Powermockito似乎扩展了单元测试中应该做什么的边界。我应该忽略所有私有和静态方法,以及偶