Bir yay uygulamam var ve bunun gibi bir denetleyicide üniter bir test oluşturmak istiyorum. Sorun, Wrapper sınıfının özel bir iç sınıf olmasıdır, bu yüzden Wrapper testte anlaşılmamıştır. Kontrolör sınıfını değiştirmeden Mockito ile alay etmek mümkün mü? Nesnenin bir örneğini almak için prepareData() kullanabilirim, ancak bu nesneyi alay etmek için kullanılıp kullanılamayacağını bilmiyorum.Özel bir iç sınıfla alay etme
Teşekkür
@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){
...
}
}
Yani benim test ben senin test yöntemlerinin üzerinde bu
@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);
....
}
Bunu neden yapmak istediğini soruyorum. Muhtemelen yanlış kodu sınayacaksınız. İçsel sınıf bağımlılıklara sahipse (muhtemelen kontrolörden mi alınır?) Bunları alay edin. Bekleyin? Kodunuz derleniyor mu? Wrapper özel sınıfsa, bunu genel bir yönteme karşı argüman olarak kullanabilir misiniz? –
@Martinho Fernandes Testte yeniyim. Ben sadece kaydetme yönteminde bir test yapmak istedim, bu yüzden Wrapper nesnesine alay etmem gerekiyordu, böylece bazı yöntemler üzerinde çağrıldığında geri dönüş nesnelerini tanımlayabiliyordum. Evet, kontrolör derler (Test, ancak bu problem değil - testte Wrapper sınıfını kullanamıyorum). Belki bunu yapmanın daha iyi bir yolu vardır. – Javi
Java beni tekrar şaşırttı (negatifte). Bu, elimde bir Java derleyicisi olmadan bana yardımcı olmak için güçsüz kılıyor :(Her neyse, izin verse bile, özel bilginin gerektirdiği bir kamu yöntemine sahip olmanın iyi bir tasarım olduğunu düşünmüyorum. Kapsüllenmeyi nasıl kıracaksınız. Bu gerçek gerçek kodda bu yöntemi kullanın? Mümkün mü –