মানক উপায়:
@RestController
public class Main {
UserService userService;
public Main(){
userService = new UserServiceImpl();
}
@GetMapping("/")
public String index(){
return userService.print("Example test");
}
}
ব্যবহারকারী পরিষেবা ইন্টারফেস:
public interface UserService {
String print(String text);
}
ইউজার সার্ভিসআইএমপিএল ক্লাস:
public class UserServiceImpl implements UserService {
@Override
public String print(String text) {
return text + " UserServiceImpl";
}
}
আউটপুট: Example test UserServiceImpl
এটি টাইট কাপল ক্লাসের একটি দুর্দান্ত উদাহরণ, খারাপ ডিজাইনের উদাহরণ এবং টেস্টিংয়ের সাথে সমস্যা হবে (পাওয়ারমোকিটোও খারাপ)।
এখন আসুন স্প্রিংবুট নির্ভরতা ইনজেকশনটি দেখুন, আলগা সংযোগের দুর্দান্ত উদাহরণ:
ইন্টারফেস একই থাকে,
প্রধান শ্রেণি:
@RestController
public class Main {
UserService userService;
@Autowired
public Main(UserService userService){
this.userService = userService;
}
@GetMapping("/")
public String index(){
return userService.print("Example test");
}
}
সার্ভিস ইউজারআইএমপিএল ক্লাস:
@Component
public class UserServiceImpl implements UserService {
@Override
public String print(String text) {
return text + " UserServiceImpl";
}
}
আউটপুট: Example test UserServiceImpl
এবং এখন পরীক্ষা লিখতে সহজ:
@RunWith(MockitoJUnitRunner.class)
public class MainTest {
@Mock
UserService userService;
@Test
public void indexTest() {
when(userService.print("Example test")).thenReturn("Example test UserServiceImpl");
String result = new Main(userService).index();
assertEquals(result, "Example test UserServiceImpl");
}
}
আমি @Autowired
কন্সট্রাক্টর এ টীকাগুলি দেখিয়েছি তবে এটি সেটার বা ফিল্ডেও ব্যবহার করা যেতে পারে।