Comment simuler une intérieure privée de la classe

J'ai un traitement au printemps et je veux créer un test unitaire sur un contrôleur comme celui-ci. Le problème est que la classe Wrapper est un privé intérieur de la classe, de sorte Wrapper n'est pas compris dans le test. Est-il possible de le simuler avec Mockito sans changer la classe du contrôleur. Je peux utiliser prepareData() pour obtenir une instance de l'objet, mais je ne sais pas si cela pourrait être utilisé pour se moquer de cet objet.

Grâce

@Controller
public class Controller {

    private class Wrapper {
        private Object1 field1;
        private Object2 field2;
        private Object1 method1(){
           ...
        }
        private Object2 method1(){
           ...
        }
    }

    @ModelAttribute("data")
    public Wrapper prepareData() {
            return new Wrapper ();
}

    public String save(@ModelAttribute("data") Wrapper wrapper, BindingResult result, Model model){
        ...
    }
}

Donc dans mon test, j'aurais quelque chose comme cela

@Test
public void usernameEmpty(){

    BindingResult result = Mockito.mock(BindingResult.class);
    Model model = Mockito.mock(Model.class);
    Wrapper data = //how to mock it
    when(data.method1()).then(new Foo1());
    when(data.method2()).then(new Foo2());
    String returned = controller.save(data, result, model);
    ....
}
Ma-je vous demander pourquoi vous voulez faire cela? Vous serez probablement en fin d'essai sur le mauvais code. Si l'intérieur de la classe a des dépendances (probablement obtenus par le contrôleur?) se moquer de ceux. Attendre? Est-ce que votre code de la compilation? Si Wrapper est privé de classe vous pouvez l'utiliser comme un argument à une méthode publique?
Fernandes je suis nouveau dans le test. Je voulais juste faire un test sur la méthode save j'ai donc besoin de se moquer de l'objet Wrapper afin que je puisse définir le retour des objets lors de certaines méthodes sont invoquées. Oui le contrôleur compile (Le test n'est pas, mais c'est le problème - que je ne peux pas utiliser la classe Wrapper dans le test). Peut-être il ya une meilleure façon de le faire.
Java il m'a surpris à nouveau (sur le négatif). Cela me fait impuissante à aider sans un compilateur Java sous la main 🙁 de toute façon, même si c'est permis, je ne pense pas que c'est un bon design afin d'avoir une méthode publique qui nécessite des connaissances de soldats. Il rompt l'encapsulation. Comment allez-vous utiliser cette méthode dans le vrai code? Est-il possible?
Fernandes vous avez raison je pense que je vais le changer pour le public
ou utiliser ma réponse 😉

OriginalL'auteur Javi | 2011-04-08