junit 5中的tmpdir注解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了junit 5中的tmpdir注解相关的知识,希望对你有一定的参考价值。


在junit 5中,如何设置针对文件的测试呢?可以使用@TempDir这个注解,比如要测试一个文件的操作,如下:
 

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileWriter

public void writeTo(String path, String content) throws IOException
Path target = Paths.get(path);
if (Files.exists(target))
throw new IOException("file already exists");

Files.copy(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)), target);

测试用例:
 

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

@Test
void writesContentToFile(@TempDir Path tempDir) throws IOException

Path output = tempDir
.resolve("output.txt");

//执行
fileWriter.writeTo(output.toString(), "test");


assertAll(
() -> assertTrue(Files.exists(output)),
() -> assertLinesMatch(List.of("test"), Files.readAllLines(output))
);

注意这里都是用到不少NIO的知识了。
   也可以把tmpdir注解注解字段类型,比如:
   

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

class FileWriterTest

private FileWriter fileWriter = new FileWriter();

@TempDir
Path tempDir;

@BeforeEach
void beforeEach()
assertTrue(Files.isDirectory(this.tempDir));


@RepeatedTest(3)
void throwsErrorWhenTargetFileExists() throws IOException
// arrange
Path output = Files.createFile(
tempDir.resolve("output.txt")
);

// act & assert
IOException expectedException = assertThrows(IOException.class, () -> fileWriter.writeTo(output.toString(), "test"));
assertEquals("file already exists", expectedException.getMessage());

 这里是在tempdir变量中加了注解,然后重复三次建立文件,并进行断言判断。
 

以上是关于junit 5中的tmpdir注解的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 中的 JUnit 注解

Selenium 中的 JUnit 注解

JUnit 5 Jupiter API

JUnit4注解

spring中的aop注解(整合junit测试)

junit和assertj的区别