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

我应该如何测试包含调用以获取当前日期的逻辑?

郜俊健
2023-03-14

例如,我有一个Kotlin类和方法(如果重要的话是Spring托管类):

import org.springframework.stereotype.Service
import java.time.LocalDateTime

data class TestObj(
    val msg: String,
    val dateTime: LocalDateTime
)

@Service
class TestAnotherService {
    fun doSmthng1(testObj: TestObj) {
        println("Oh my brand new object : $testObj")
    }
}

@Service
class TestService(
    private val testAnotherService: TestAnotherService
) {
    fun doSmthng() {
        testAnotherService.doSmthng1(TestObj("my message!", LocalDateTime.now()))
    }
}

我如何测试TestService通过TestObj,并将dateTime作为LocalDateTime#now

我有几种解决方案:

  1. 让我们在assertEquals中的比较中添加一个小增量。
  2. 让我们验证在我们传入TestantherService#doSmthng1dateTime字段的对象中不是null,甚至使用Mockito#any
  3. 让我们使用PowerMock或类似方式模拟调用LocalDateTime#now
  4. 让我们使用DI。使用此bean创建配置:
@Configuration
class AppConfig {

    @Bean
    fun currentDateTime(): () -> LocalDateTime {
        return LocalDateTime::now
    }
}

并将使用LocalDateTime#now的服务修改为:

    fun doSmthng() {
        testAnotherService.doSmthng1(TestObj("my message!", currentDateTimeFunc.invoke()))
    }

哪个是最佳解决方案?或者可能还有其他解决方案?

共有1个答案

隗嘉歆
2023-03-14

只需将当前日期作为函数参数传递即可。

fun doSmthng(now: LocalDateTime = LocalDateTime.now()) {
    testAnotherService.doSmthng1(TestObj("my message!", now))
}

在测试中,你可以通过一些特定的日期,并对其进行断言。其想法是注入依赖项,而不是在函数体中显式创建依赖项。

 类似资料:
  • 我在文档中看到的是< code>DateTime.now(),但它也返回Timespan,我只需要日期。

  • 问题内容: 我需要将当前日期添加到JDBC调用的准备好的语句中。我需要以格式添加日期。 我试过了 但是我有这个错误: 有没有办法获取具有相同格式的对象? 问题答案: A 不是。相反。A 是一个。 您需要将其转换为使用,需要一个构造函数,一个可以提供。

  • 问题内容: 如何使用Java获取当前日期和时间? 我正在寻找与C#等效的东西。 问题答案: 只需构造一个没有任何参数的新对象即可;这会将当前日期和时间分配给新对象。 在的话的Javadoc的无参数的构造函数: 分配一个Date对象并对其进行 初始化,以便它表示分配它的时间( 以最近的毫秒为单位)。 确保您使用的不是-后者没有零参数构造函数,并且语义有所不同,这是完全不同的对话的主题。:)

  • 问题内容: 如何在JavaScript中获取当前日期? 问题答案: 使用生成一个新的包含当前日期和时间对象。 这将以mm / dd / yyyy的格式给您今天的日期。 只需更改为所需的任何格式。

  • 问题内容: 用Java获取当前日期/时间的最佳方法是什么? 问题答案: 这取决于你想要的日期/时间形式: 如果你想将日期/时间作为一个单一的数值,则可以用UNIX纪元后的毫秒数(以Java形式)表示。该值是UTC时间点的增量,并且与本地时区无关…假设系统时钟已正确设置。 如果你希望日期/时间的格式允许你以数字方式访问组件(年,月等),则可以使用以下方式之一: 给你一个Date使用当前日期/时间初始

  • 问题内容: 我有一个 yyyyMMdd 格式的String对象 。是否有一种简单的方法来获取具有相同格式的先前日期的String?谢谢 问题答案: 我会重写这些答案。 您可以使用 若要获得与使用Calendar计算的结果相同的结果。