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

无法模拟System.CurrentTimeMillis()

麻华辉
2023-03-14

我正在使用TestNG编写单元测试。问题是当我模拟System.CurrentTimeMillis时,它返回的是实际值,而不是模拟的值。理想情况下,它应该返回0L,但它返回的是实际值。我该怎么做才能继续?

class MyClass{

    public void func1(){
       System.out.println("Inside func1");
       func2();
    }

    private void func2(){
        int maxWaitTime = (int)TimeUnit.MINUTES.toMillis(10);
        long endTime = System.currentTimeMillis() + maxWaitTime; // Mocking not happening
        while(System.currentTimeMillis() <= endTime) {
                System.out.println("Inside func2");
        }
    }
}

@PrepareForTest(System.class)
class MyClassTest extends PowerMockTestCase{
   private MyClass myClass;
   
   @BeforeMethod
   public void setup() {
     MockitoAnnotations.initMocks(this);
     myclass = new MyClass();
   }
   @Test    
   public void func1Test(){
      PowerMockito.mockStatic(System.class)
      PowerMockito.when(System.currentTimeMillis()).thenReturn(0L);
      myclass.func1();
   }
}

共有1个答案

曾航
2023-03-14

制作一个可以在java.time.clock中传递的包构造函数

class MyClass{ 
    private Clock clock;
    public MyClass() {
        this.clock = Clock.systemUTC();
    } 
    // for tests 
    MyClass(Clock c) {
        this.clock = c;
   } 

然后对测试进行模拟,并使用this.clock.instant()获取时钟的时间

 类似资料:
  • 我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。

  • 有人能帮帮我吗?提前谢了。

  • 我试图模拟一个外部模块(jwt_decode),对于感兴趣的人来说,我已经看到了许多如何使用Jest模拟外部节点模块的示例,无论是在测试套件中的所有测试,还是在每个测试的基础上。 我已经能够模拟依赖项,以便它模拟套件中所有测试的返回值,尽管缺省函数是我真正关心的全部。 这工作得很好,只是我想测试一个返回的令牌已经过期的场景,这样我就可以验证在出现这种情况时是否调度了某些Redux操作。 我想修改单

  • 我想在类AppleProcessor中测试一个方法: 请注意,Fruit是AppleFruit实现的方法的接口,并且还有一个方法。 我的测试看起来像: 然而,我得到了以下错误:

  • 我有Unity 5.0.2P1个人版和Xcode 6.3.1版(6D1002)。 以下是希望重现问题的人的一些步骤: 新的空白Unity项目 IOS播放器设置>SDK版本:Simulator SDK 当应用程序在模拟器中启动时,生成和运行会产生以下结果: 警告:在路径“/users/...(用户名).../library/developer/xcode/deriveddata/unity-ipho

  • 我对JUnit测试用例有问题。由于某些原因,我无法进入模拟类的一个方法,而且我不确定为什么会发生这种情况。 我甚至不打算用下面的方法。我不确定为什么会发生这种情况,这就给了我上面的结论。