[英]spring3 annotation with main method
我有以下課程:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/com/home/app/Home-ctx.xml"})
public class LoginDetailsTest {
public static void main(String[] args) {
new LoginDetailsTest().testLoginDetails();
}
@Inject
@Named(HomeConstants.loginDetailsService)
private LoginDetailsService loginDetailsService;
private List<UserLogin> loginDetails;
@Test
public void testLoginDetails() {
UserLogin login = new UserLogin();
login.setLoginName("test");
login.setLoginPassword("test123");
loginDetails = loginDetailsService.loginDetails(login);
for (UserLogin loginDet : loginDetails) {
System.out.println(loginDet.getLoginName());
System.out.println(loginDet.getLoginPassword());
}
}
}
如果我在代碼上運行junit test,那么它會給出預期的結果。 如果我作為Java應用程序運行,即main方法,則它為loginDetailsService .loginDetails(login)提供空指針異常。 怎么可以作為主要方法運行沒有錯誤?
當你“運行代碼作為junit test”來引導你的應用程序上下文和依賴注入時,你仍然需要做JUnit所做的事情:
public static void main(String[] args) {
org.junit.runner.JUnitCore.run(LoginDetailsTest.class);
}
main
是另一回事。 因為通過new LoginDetailsTest()
實例化它不是由Spring構建的 - 沒有依賴注入。
你需要做的是:
main
方法創建一個新的應用程序上下文appctx.xml
,它導入Home-ctx.xml
並聲明一個新bean <bean id="loginDetailsTest" class="LoginDetailsTest"/>
在你的main
方法中獲取bean的一個實例並調用testLoginDetails()
如下所示:
public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("appctx.xml"); LoginDetailsTest loginDetailsTest = (LoginDetailsTest) context.getBean("loginDetailsTest"); loginDetailsTest.testLoginDetails(); }
通常,您應該分離JUnit測試,主方法和業務邏輯。
首先,你的測試工作的原因是(SpringJUnit4ClassRunner),它做了很多,但為了保持簡單,它啟動了彈簧容器,並注入了你在上下文文件(Home-ctx.xml)中定義的所有依賴項,包括一個你注入測試用例。 有關更多詳細信息,請查看這些類
要解決main方法的問題,你必須加載你自己的spring上下文並注入一些像這樣的依賴
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/com/home/app/Home-ctx.xml");
new LoginDetailsTest().loginDetailsService = (LoginDetailsService) ctx.getBean(LoginDetailsService.class);
//now your main method should work
new LoginDetailsTest().testLoginDetails();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.