[JAVA] Je souhaite utiliser PowerMock dans une classe qui combine des tests paramétrés et des tests ordinaires

TL;DR

--Seulement @Runwith (Enclosed.class) pour les classes externes --Ajoutez ce qui suit à la classe interne - @RunWith(PowerMockRunner.class) --@ PrepareForTest ({classe testée}) - @PowerMockRunnerDelegate(Parameterized.class) --@ PowerMockRunnerDelegate (JUnit4.class)n'est pas requis

Ce que je voulais faire

Je l'ai cherché

Configuration de la bibliothèque

code de vérification

Cible de test

public class StaticClass {
    public static String MESSAGE;

    static {
        int i = new Random().nextInt();
        if (0 <= i && i <= 10) {
            MESSAGE = "Parameter is inside of range, 0 to 10.";
        } else {
            MESSAGE = "Nmm...?";
            method();
        }
    }

    private static void method() {
        // to do any action
    }
}

tester

@RunWith(Enclosed.class)
public class StaticClassTest {

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({StaticClass.class})
    @PowerMockRunnerDelegate(Parameterized.class)
    public static class ParameterizeTest {
        @Parameterized.Parameter
        public Integer parameter;

        @Parameterized.Parameters(name = "parameter is {0}")
        public static Object[][] parameterSupplier() {
            return new Object[][]{
                    {0},
                    {1},
                    {2},
                    {3},
                    {4},
                    {5},
                    {6},
                    {7},
                    {8},
                    {9},
                    {10}
            };
        }


        @Test
        public void test() throws Exception {
            // given
            Random random = PowerMockito.mock(Random.class);
            PowerMockito.whenNew(Random.class).withNoArguments().thenReturn(random);
            PowerMockito.when(random.nextInt()).thenReturn(parameter);

            // expect
            assertEquals("Parameter is inside of range, 0 to 10.",
                    Whitebox.getInternalState(StaticClass.class, "MESSAGE"));
        }
    }

    @RunWith(PowerMockRunner.class)
    @PrepareForTest({StaticClass.class})
    public static class NormalTest {
        @Test
        public void test() throws Exception {
            // given
            Random random = PowerMockito.mock(Random.class);
            PowerMockito.whenNew(Random.class).withNoArguments().thenReturn(random);
            PowerMockito.when(random.nextInt()).thenReturn(99);

            // expect
            assertEquals("Nmm...?",
                    Whitebox.getInternalState(StaticClass.class, "MESSAGE"));
        }
    }
}

référence

http://tomoyamkung.net/2013/08/28/java-junit4-enclosed/ https://stackoverflow.com/questions/28027445/powermock-access-private-members

Recommended Posts

Je souhaite utiliser PowerMock dans une classe qui combine des tests paramétrés et des tests ordinaires
Je veux utiliser une petite icône dans Rails
Je souhaite utiliser le balayage arrière sur un écran qui utilise XLPagerTabStrip
Je veux utiliser @Autowired dans Servlet
[Wire Mock] Je souhaite configurer un serveur stub / simulé en Java et effectuer des tests E2E.
[Java Spring MVC] Je souhaite utiliser DI dans ma propre classe
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Je souhaite également utiliser Combine dans UIKit.
Je souhaite utiliser les fonctions pratiques de Clojure dans Kotlin
Je veux aussi utiliser des coquillages à Laradock! !!
Je veux aussi utiliser ES2015 avec Java! → (´ ・ ω ・ `)
Je souhaite définir une fonction dans la console Rails
Je veux cliquer sur une broche GoogleMap dans RSpec
Je veux trouver un chemin relatif dans une situation où Path est utilisé
Je veux faire une liste avec kotlin et java!
Je veux appeler une méthode et compter le nombre
Je veux créer une fonction avec kotlin et java!
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je veux donner un nom de classe à l'attribut select
Je veux créer un fichier Parquet même en Ruby
Je souhaite utiliser FireBase pour afficher une chronologie comme Twitter
Si vous souhaitez simuler une méthode dans RSpec, vous devez utiliser la méthode allow pour mock et la méthode singleton.
Quelle classe doit être utilisée pour obtenir la date et l'heure dans l'application Rails (Time, DateTime, TimeWithZone)
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Mon mémorandum que je veux faire ValidationMessages.properties UTF8 dans Spring Boot
Je veux ForEach un tableau avec une expression Lambda en Java
"Professeur, je souhaite implémenter une fonction de connexion au printemps" ① Hello World
Je souhaite développer une application web!
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Je veux écrire un test unitaire!
Faisons une application TODO avec Java 2 Je veux créer un modèle avec Spring Initializr et créer Hello world
J'ai essayé de mettre facilement CentOS-7 dans un PC dont je n'ai plus besoin
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
[Java] Comment utiliser la classe FileReader et la classe BufferedReader
Je souhaite envoyer un e-mail en Java.
Même en Java, je veux sortir vrai avec un == 1 && a == 2 && a == 3 (magie grise qui n'est pas tant que magie noire)
[Ruby] Je veux faire un saut de méthode!
Je veux utiliser java8 forEach avec index
Comment créer une classe qui hérite des informations de classe
Je souhaite transmettre APP_HOME pour me connecter à Gradle
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
Je souhaite concevoir une structure pour la gestion des exceptions
Je veux être finalement même à kotlin
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (Royal road edition qui n'est ni magique ni rien)
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
Je veux obtenir la valeur en Ruby
[Java] Comment utiliser la classe Calendar et la classe Date
Je souhaite établir une connexion lorsqu'une base de données est créée à l'aide de Spring et MyBatis