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

将Spring Java8 Junit测试转换为Kotlin时消除lateinit

顾永福
2023-03-14

Java8:

@ActiveProfiles("junit")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath*:META-INF/spring/applicationContext.xml"})
public class AuctionTest {

    @Autowired
    AccountProcessor ap;

    @Test
    @Rollback
    public void securityTest(){

用Kotlin改写一下,看起来是这样的:

@ActiveProfiles("junit")
@RunWith(SpringJUnit4ClassRunner::class)
@ContextConfiguration("classpath*:META-INF/spring/applicationContext.xml")
class AccountTest() {

    @Autowired
    lateinit var ap: AccountProcessor

    @Test
    @Rollback
    fun securityTest() {

上面的单元测试运行良好,但我想去掉lateInit

@ActiveProfiles("junit")
@RunWith(SpringJUnit4ClassRunner::class)
@ContextConfiguration("classpath*:META-INF/spring/applicationContext.xml")
class AccountTest(@Autowired val ap: AccountProcessor) {

    @Test
    @Rollback
    fun securityTest() {

在org.springframework.test.context.junit4.springjunit4ClassRunner.(Springjunit4ClassRunner.java:104)在sun.reflect.nativeConstructorAccessorImpl.newInstance0(原生方法)在sun.reflect.nativeConstructorAccessorImpl.newInstance(原生方法)在sun.reflect.nativeConstructorAccessorImpl.newInstance(原生方法)在quests.filterrequest.getrunner(filterrequest.java:31)在com.intellij.junit4.junit4ideatestrunner.java:96)在com.intellij.junit4.junit4ideatestrunner.startrunnerwithargs(junit4ideatestrunner.java:42)在com.intellij.rt.execution.junit.junitstarter.prepareStreamsandStart(junitstarter.java:262)在

有没有办法解决这个问题,还是我被lateinit@autowires困住了?

共有1个答案

吕灿
2023-03-14

spring组件注入处理器的情况下,您应该注释构造函数,而不是构造函数参数:

@Service
class AccountTest @Autowired constructor(val ap: AccountProcessor) {
}

Bit Junit增加了他们对如何实现测试类的限制,并且不可能以您想要的方式注入bean。

ps.从Spring 4.3开始,您不需要@autowired:

@Service
class AccountTest(val ap: AccountProcessor) {
 类似资料:
  • 有谁能帮我把Android Studio中的Kotlin代码转换成Java吗? 我经历了以下过程: 工具>>Kotlin>>将Kotlin反编译为Java

  • 我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案

  • 问题内容: 如何获得XUnit格式的Go测试库输出以与Jenkins集成?没有命令行选项可使用输出到XML或XUnit格式。 问题答案: 有一个很好的小插件可以转换:https : //github.com/tebeka/go2xunit 要安装它: 要使用它: 如果您的情况正常:

  • Code A可以将长值转换为日期值,就像2018.01.10一样 > 我希望得到日期时间值 ,如 2018.01.10 23:11,我该如何使用 Kotlin? 我希望将当前时间转换为长值,我该如何使用Kotlin? 谢谢! 代码A

  • 问题内容: 如何将Kotlin转换为varargs Java ? 如何将ArrayList传递给varargs方法参数? 问题答案: 您应该使用如下形式的 散布运算符 : 散布运算符需要放在数组参数的前面: 有关更多信息,请参见文档: 当我们调用-function时,可以一个接一个地传递参数,例如,或者,如果我们已经有一个数组并将其内容传递给该函数,则可以使用spread运算符(将数组前缀为):

  • 如何将Kotlin转换为varargs Java? 如何将ArrayList传递给varargs方法参数?