Статьи

Nifty JUnit: использование правила на уровне метода и класса

Как показано в посте Nifty JUnit: Работа с временными файлами , можно использовать @Rule в тесте JUnit, который является правилом уровня метода. В этом примере я хотел бы показать вариант @ClassRule для правила уровня класса.

Метод Правило

@Rule запускается перед каждым методом тестирования (точно так же как @Before ) и после каждого метода тестирования (точно так же как @After ) класса теста, как показано в примере ниже.

JUnitRuleTest

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.jdriven;
 
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
 
import java.io.File;
import java.io.IOException;
 
public class JUnitRuleTest {
 
    //The Folder will be created before each test method and (recursively) deleted after each test method.
    @Rule
    public TemporaryFolder temporaryFolder = new TemporaryFolder();
 
    @Test
    public void testJUnitRule() throws IOException {
        File tempFile = temporaryFolder.newFile("tempFile.txt");
 
        //Your test should go here.
    }
}

Правило класса

Помимо обычного @Rule у нас есть возможность создать @ClassRule . В примере с TemporaryFolder это приведет к созданию папки, которая создается перед всеми методами тестирования (например, @BeforeClass ) и уничтожается после всех методов тестирования (точно так же, как @AfterClass ). В приведенном ниже примере вы можете создать временный файл и использовать один и тот же файл во всех методах тестирования. Временный файл будет удален после завершения всех методов тестирования.

JUnitClassRuleTest

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.jdriven;
 
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
 
import java.io.File;
import java.io.IOException;
 
public class JUnitClassRuleTest {
 
    //The Folder will be (recursively) deleted after all test.
    @ClassRule
    public static TemporaryFolder temporaryFolder = new TemporaryFolder();
 
    public static File tempFile;
 
    @BeforeClass
    public static void createTempFile() throws IOException {
        tempFile = temporaryFolder.newFile("tempFile.txt"); //The tempFile will be deleted when the temporaryFolder is deleted.
    }
 
    @Test
    public void testJUnitClassRule_One() {
        //Your test should go here, which uses tempFile
    }
 
    @Test
    public void testJUnitClassRule_Two() {
        //Your test should go here and uses the same tempFile
    }
}