首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Kotlin中使用Junit 5的TempDir?

如何在Kotlin中使用Junit 5的TempDir?
EN

Stack Overflow用户
提问于 2021-07-01 06:48:41
回答 1查看 295关注 0票数 0

我想将以下(工作中的) java测试转换为Kotlin:

代码语言:javascript
复制
package my.project;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class MyTempFileTest {

    @TempDir
    public File tempFolder;

    @Test
    public void testTempFolder() {
        Assertions.assertNotNull(tempFolder);
    }

    @Test
    public void testTempFolderParam(@TempDir File tempFolder) {
        Assertions.assertNotNull(tempFolder);
    }
 }

有了IntelliJ的内置转换器,它就变成了:

代码语言:javascript
复制
package my.project

import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
import java.io.File

class MyTempFileTest {
    @TempDir
    var tempFolder: File? = null
    
    @Test
    fun testTempFolder() {
        Assertions.assertNotNull(tempFolder)
    }

    @Test
    fun testTempFolderParam(@TempDir tempFolder: File?) {
        Assertions.assertNotNull(tempFolder)
    }
}

但这无法初始化:

代码语言:javascript
复制
org.junit.jupiter.api.extension.ExtensionConfigurationException: @TempDir field [private java.io.File my.project.MyTempFileTest.tempFolder] must not be private.

然而,把public放在var前面并没有什么不同。我得到了同样的错误信息,IntelliJ甚至建议再次删除明显“多余”的public

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 19:28:40

您必须使用@JvmField注释该字段,以便Kotlin编译器生成一个实际的公共字段,而不是getter和setter:

代码语言:javascript
复制
@TempDir
@JvmField
var tempFolder: File? = null
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68202376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档