我需要在一个@Async方法中模拟LocalDateTime。但是模拟的localDateTime在Async方法中不起作用。但是删除异步可以按预期工作。到目前为止我已经附上了代码。
public interface ConfigurationProcessor<T> {
void process(Configuration configuration);
}
下面是上述接口的实现
@Service
public class ConfigurationProcessoeStudents10Impl implements ConfigurationProcessor<Student> {
private final StudentRepository studentRepository;
@Autowired
public ConfigurationProcessoeStudents10Impl(StudentRepository studentRepository) {
this.studentRepository = studentRepository;
}
@Override
@Async
public void process(Configuration configuration) {
studentRepository.save(Student.builder().Name(configuration.name).Age(configuration.age).RegTime(LocalDateTime.now).build());
}
}
这是单元测试
@EnableAutoConfiguration
@SpringBootTest
public class StudentsC10IT {
@Autowired
ConfigurationProcessor<StudentC10> configurationProcessor;
@Test
@Tag("VerifyProcess")
@DisplayName("Verify kafka event consumer from configuration manager")
void verifyProcess(){
LocalDateTime lt = LocalDateTime.parse("2018-12-30T19:34:50.63");
try (MockedStatic<LocalDateTime> localDateTimeMockedFourMonth = Mockito
.mockStatic(LocalDateTime.class, Mockito.CALLS_REAL_METHODS)) {
localDateTimeMockedFourMonth.when(LocalDateTime::now).thenReturn(lt));
configurationProcessor.process();
}
}
}
需要知道如何在不使用power mockito的情况下在此@Async方法中模拟LocalDateTime?
1条答案
按热度按时间2ul0zpep1#
MockedStatic
是线程本地对象,如Mockito docs中所述。此外,您应该为此对象调用close()
。和
@Async
在不同的线程中执行方法,这就是您的测试不起作用的原因。作为您测试的可能解决方案-禁用异步:参见答案here