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

单元测试与时间相关的数据没有PowerMock[重复]

黄弘深
2023-03-14

我的类有一个方法,它尝试执行一些操作,并在所有操作完成后返回nano时间。当测试这个方法时,我遇到了一个问题,测试结果总是不同的(因为取决于当前时间)。

如何正确测试返回值?没有PowerMock有办法吗?

示例类:

class ExampleClass {
    public long performOperationsAndGetTimeNano(){
        //some operations...
        return Instant.now().getNano();
    }
    ...
}

示例测试:

@ExtendWith(MockitoExtension.class)
class ExampleTest{
    private static final long EXPECTED_TIME = 555927900L;
    private ExampleClass subject;

    //init...

    @Test
    void performOperationAndGetTimeNano(){
        long actualTime = subject.performOperationAndGetTimeNano(); //always different result

        assertEquals(EXPECTED_TIME, actualTime); //always fails
    }
}

感谢您的回答!

共有1个答案

湛财
2023-03-14

问题:如何正确测试返回值?修复:EXPECTED\u TIME=EXPECTED\u TIME(CURTIME\u IN\u NANOSEC-EXPECTED\u TIME),时间位数至纳秒(偏移时间至当前纳秒加至EXPECTED\u TIME),实际\u TIME=主题。performOperationAndGetTimeNano()--这会给出直到纳秒的时间数字

私有静态最终长EXPECTED_TIME=getVisectedLongTime();

模拟java类中使用的long getExpectedLongTime(){}方法提供了如上所述的预期时间。注意,在Mockito中,每个输入数据都由具有示例输入数据的Mock java类模拟。

B.没有PowerMock有办法吗?修复:是的,像上面一样简单的JUnit。不需要模拟的java类,我们可以像上面一样编写单独的方法和使用。

希望我回答了你的两个问题。

 类似资料:
  • 问题内容: 我需要测试一个函数,该函数的结果将取决于当前时间(使用Joda time的时间)。 是否可以使用(例如使用Mockito)存根/模拟系统时间,以便我可以可靠地测试该功能? 问题答案: Joda time支持通过类的和方法设置“假”当前时间。 参见https://www.joda.org/joda- time/apidocs/org/joda/time/DateTimeUtils.htm

  • 问题内容: 是否可以在不设置数据库的情况下编写Django单元测试?我想测试不需要设置数据库的业务逻辑。尽管设置数据库的速度很快,但在某些情况下我真的不需要它。 问题答案: 你可以继承DjangoTestSuiteRunner的子类,并覆盖setup_databases和teardown_databases方法以进行传递。 创建一个新的设置文件,并将TEST_RUNNER设置为刚创建的新类。然后,

  • 是否有人能够从Maven Build获得JaCoCo中JMockit和Powermock单元测试的复盖范围? 我有一个Powermock单元测试的现有测试集,我希望逐步将其迁移到JMockit。但是我需要能够在一个报告中看到所有单元测试的测试覆盖范围,最好是在Sonar中。 通过将JaCoCo置于“脱机”模式,我确实使JMockit和Powermock测试与Surefire/JaCoCo一起运行(

  • 我正在为一个单例Java类编写单元测试(使用JUnit和Mockito)。我无法更改类实现本身。 使用PowerMockito,它是这样的(并且工作): 要求重写测试,而不使用PowerMock或PowerMockito或任何其他静态模拟API。由于我不能将单例类更改为使用依赖注入,我不确定什么是这样做的好方法。 任何帮助都将不胜感激。

  • 有人能帮我理解testProguardFile的用法吗。假设我在gradle build文件中有调试buildType及其配置如下: 那么为什么我要提供另一个名为test-proguard-rules的proguard规则文件呢。专业测试?如果我理解正确,当我进行仪器测试时,会生成一个单独的apk,但是如果我只进行单元测试,情况是否也是这样? 我希望能够运行“单元测试”(不是仪器测试),但让单元测

  • 我想现在,如果有可能模仿一个类一样 我们的业务逻辑在代码中的某个地方用< code>new myClass()创建了这个对象,因此我不能访问创建的对象来模拟这些方法。有没有办法替换整个类或者覆盖那些方法。我正在使用mockito,我只找到了这样做的例子 我们不能使用 PowerMock,因为它与我们的测试环境不兼容。 欢迎任何建议。