JUnit 5'de rule desteği kaldırılmıştır. TemporaryFolder gibi bazı ön tanımlı rule'lar da JUnit 5 kütüphanesinde artık bulunmamaktadır. Ancak 5.4.2 sürümünden sonra @TempDir şeklinde Temporary Folder desteği gelmiştir. 5.4.2 öncesi TemporaryFolder işlevini sağlamak için TemporaryFolder uzantısı (extention) yaratmanız gerekir. Veya junit-extensions projesini kullanabilirsiniz. Bu
github.com/glytching/junit-extensions ve
glytching.github.io/junit-extensions/index bağlantılarına bakabilirsiniz.
Öncelikle projeye bağımlılıkları aşağıdaki gibi ekleyebiliriz:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.4.0-M1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.glytching</groupId>
<artifactId>junit-extensions</artifactId>
<version>2.3.0</version>
<scope>test</scope>
</dependency>
Öncelikle test edilecek bir sınıf yazalım. Bu sınıf bir properties dosyasını yükleyen bir sınıf olsun:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesLoader {
private Properties properties=null;
public void load(String path)
throws FileNotFoundException, IOException {
properties=new Properties();
try(InputStream is=new FileInputStream(path)){
properties.load(is);
}
}
public String getProperty(String key) {
return properties.getProperty(key);
}
}
Bu sınıfı test etmek için TemporaryFolderExtension'ı kullanan bir test sınıfı aşağıdaki gibi yaratılabilir:
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import io.github.glytching.junit.extension.folder.TemporaryFolder;
import io.github.glytching.junit.extension.folder.TemporaryFolderExtension;
@ExtendWith(TemporaryFolderExtension.class)
public class PropertiesLoaderTest {
private static File file;
@BeforeAll
public static void prepare(TemporaryFolder givenTemporaryFolder) throws IOException {
file = givenTemporaryFolder.createFile("test.properties");
Properties properties=new Properties();
properties.put("test", "testvalue");
try(OutputStream os =new FileOutputStream(file)){
properties.store(os,"test properties");
}
}
@Test
@ExtendWith(TemporaryFolderExtension.class)
public void loadTest() throws IOException {
PropertiesLoader loader=new PropertiesLoader();
loader.load(file.getAbsolutePath());
assertEquals("testvalue", loader.getProperty("test"));
}
}
Sınıfın en üstünde @ExtendWith(TemporaryFolderExtension.class) ile TemporaryFolderExtension'ı kullanacağımız belirtiyoruz. @BeforeAll ile tanımlanan yöntem ile TemporaryFolder'ı alıyoruz ve bir properties dosyasını yaratıyoruz. loadTest() yönteminde ise asıl test edeceğimiz PropertiesLoader sınıfını yaratıyoruz ve verilen path'deki properties dosyasını yükletiyoruz. Eğer test değeri testvalue ise PropertiesLoader başarılı bir şekilde çalışmış demektir.
JUnit 5, 5.4.2 sonrası için herhangi bir extention kütüphanesi kullanmadan "@TempDir Path path" şeklinde test yöntemlerine aktarılabilirsiniz:
@Test
public void createFileTest(@TempDir Path tempDir) {
String testFilePath=tempDir.toString()+File.separator+"test.txt";
try {
Files.createFile(Paths.get(testFilePath));
} catch (IOException e) {
fail(e);
}
//...
}