当我设置特定日期时,我正在努力测试我的端点。
我不想使用 PowerMock 来模拟静态方法,而是决定更改服务的实现并使用 LocalDate.now(Clock Clock) 实现,以便更容易测试它。
我添加到我的 SpringBootApplication 类中:
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
Run Code Online (Sandbox Code Playgroud)
并将其自动连接到我的服务
@Autowired
private Clock clock;
Run Code Online (Sandbox Code Playgroud)
并在我的实现中使用它:
LocalDateTime localDate = LocalDateTime.now(clock);
Run Code Online (Sandbox Code Playgroud)
在测试方面我嘲笑了时钟
private final static LocalDate WEEKEND = LocalDate.of(2020, 07, 05);
@Mock
private Clock clock;
private Clock fixedClock;
Run Code Online (Sandbox Code Playgroud)
并这样使用它:
MockitoAnnotations.initMocks(this);
//tell your tests to return the specified LOCAL_DATE when calling LocalDate.now(clock)
fixedClock = Clock.fixed(WEEKEND.atTime(9, 5).toInstant(ZoneOffset.UTC), ZoneId.of("CET"));
doReturn(fixedClock.instant()).when(clock).instant();
doReturn(fixedClock.getZone()).when(clock).getZone();
ResponseEntity<String> response = restTemplate.postForEntity(base.toString(), request, String.class);
Run Code Online (Sandbox Code Playgroud)
当我调试它时,它fixedClock具有我期望的值FixedClock[2020-07-05T09:05:00Z,CET]。相反,如果我在服务实现上放置断点,则该localDate变量的值是2020-07-09- …
我开始研究 Kotlin 编程语言,但我有些不清楚,我需要一些帮助来澄清它。
从理论上讲,我很清楚,在 Kotlin 中几乎所有东西都有价值。从实际层面来看,事实并非如此,我发现了这个案例。
有了这个代码:
val isUnit = println("This is an expression")
println(isUnit)
Run Code Online (Sandbox Code Playgroud)
我的输出是
This is an expression
kotlin.Unit
Run Code Online (Sandbox Code Playgroud)
所以首先它打印他的类型的值isUnit,然后打印他的类型。
但如果我这样做
val isUnit = 10
println(isUnit)
Run Code Online (Sandbox Code Playgroud)
输出将是
10
Run Code Online (Sandbox Code Playgroud)
为什么在这种情况下输出不是
10
kotlin.Int
Run Code Online (Sandbox Code Playgroud)
?