Wie zum Hohn eine private innere Klasse

Ich habe eine spring-Anwendung, und ich will zu schaffen, einen einheitlichen test auf einem controller wie dieser. Das problem ist, dass die Wrapper-Klasse ist eine private innere Klasse, also den Wrapper, wird nicht verstanden im test. Ist es möglich, zu verhöhnen, als es mit Mockito ohne änderung der controller-Klasse. Ich kann verwenden prepareData() um eine Instanz des Objekts, aber ich weiß nicht, ob dies verwendet werden könnte, um mock-Objekts.

Dank

@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){
        ...
    }
}

Also in meinem test würde ich so etwas haben

@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);
    ....
}
Meine ich Fragen, warum Sie dies tun wollen? Sie wird wahrscheinlich am Ende die Prüfung der code falsch. Wenn die innere Klasse hat Abhängigkeiten (wahrscheinlich die durch die controller?) verspotten diese. Warten? Funktioniert dein code kompilieren? Wenn Wrapper eigenen Klasse können Sie verwenden Sie es als ein argument für eine öffentliche Methode?
Fernandes ich bin neu im Test. Ich wollte nur einen test machen auf die speichern-Methode, so dass ich brauchte, um zu verspotten die Wrapper-Objekt, so könnte ich definieren, die Objekte zurückgeben, wenn einige Methoden aufgerufen werden. Ja der controller kompiliert (für Den test nicht, aber das ist ja das problem, dass ich nicht verwenden können Wrapper-Klasse im test). Vielleicht gibt es einen besseren Weg, dies zu tun.
Java nur überrascht mich wieder (auf dem negativ). Das macht mich machtlos zu helfen, ohne ein Java-compiler auf der hand 🙁 Trotzdem, auch wenn erlaubt, ich glaube nicht, es ist ein gutes design, um eine öffentliche Methode, die erfordert Kenntnisse der Soldaten. Es bricht die Kapselung. Wie verwenden Sie diese Methode in realen code? Ist es möglich?
Fernandes du hast Recht, ich denke, ich werde ändern Sie es auf öffentlichen
oder nutzen Sie meine neue Antwort 😉

InformationsquelleAutor Javi | 2011-04-08

Schreibe einen Kommentar