2014-10-06 5 views
0

Я начинаю работать с фреймворком Spring, и я пытаюсь обернуть голову вокруг концепции бобов. У меня есть файл XML:Вставка значений весенних бобах

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id= "currentDateService" class ="xx.CurrentDateSerivceimpl" /> 
</beans> 

и класс, чтобы получить текущую дату:

public class CurrentDateServiceImpl implements CurrentDateService { 
    public LocalDate getCurrentDate() { 
     return LocalDate.now() ; 

    } 

То, что я пытаюсь выполнить простой @test утверждать, если значение боб является так же, как и текущая дата, которую я поставлю.

То, что я застрял на это:

@Test 
public void test() { 
    ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml"); 
    CurrentDateServiceImpl currentDateServiceObj = (CurrentDateServiceImpl) context.getBean("currentDateService"); 
    LocalDate date = LocalDate.now(); 
    LocalDate date2 = "the value of the bean"; 
    assertEquals(date, date2); 
} 

Я не знаю о том, как я могу поставить значение компоненты в испытанию, и мне было интересно, как осуществить это, и если есть любая хорошие учебники/документация для пружинных самих документов, кроме

Edit:

package lt.insoft.app.bl.service.impl; 

import static org.junit.Assert.assertEquals; 

import java.time.LocalDate; 

import lt.insoft.app.bl.service.CurrentDateService; 
import lt.insoft.app.bl.service.CurrentDateServiceFormat; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "file:src/main/resources/META-INF/application-context.xml" }) 
public class CurrentDateServiceImplTest { 

@Autowired 
CurrentDateService service; 
CurrentDateServiceFormat service2; 


    @Test 
    public void test() { 

     LocalDate date = LocalDate.now(); 
     LocalDate date2 = service.getCurrentDate();  
     String date3 = service2.formatCurrentDate(); 
     System.out.println(date3); 
     assertEquals(date, date2); 
    } 

} 

Почему это не печатает отформатированную дату?

+1

Просто позвоните 'currentDateServiceObj.getCurrentDate()' – Jens

+0

Там нет необходимости делать все вручную. Для нового кода я обычно рекомендую JavaConfig над XML и, конечно, встраивание в bean lookup. – chrylis

ответ

1

Используйте пружинную опору для тестирования. Код будет более понятным и понятным.

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"application-context.xml"}) 
public class TestClass{ 

@Autowired 
CurrentDateService service; 

@Test 
public void test() { 

    LocalDate date = LocalDate.now(); 
    LocalDate date2 = service.getCurrentDate(); 
    assertEquals(date, date2); 
} 
} 

Я думаю, что вы хотели сделать что-то вроде этого:

public class CurrentDateServiceImpl implements CurrentDateService { 
    public LocalDate getCurrentDate() { 
     return LocalDate.now() ; 

    } 
} 

public class CurrentDateServiceFormatImpl implements CurrentDateServiceFormat{ 
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy"); 

    CurrentDateService service; 

    public void myMethod(){ 
     return service.getCurrentDate().format(FORMATTER); 
    } 

    public void setService(CurrentDateService service){ 
     this.service = service; 
    } 
} 

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id= "currentDateService" class ="xx.CurrentDateSerivceimpl" /> 
    <bean id= "CurrentDateServiceFormat" class ="xx.CurrentDateServiceFormatImpl"> 
    <property name="service" id-ref="currentDateService"/> 
    </bean> 
</beans> 
+0

Спасибо, хотя у меня есть следующий вопрос, кажется, что я не понимаю, что такое боб, на самом деле, должен ли я поставить вопрос дальше здесь? – Monty

+0

Хорошо, позвольте мне попытаться воплотить. В обычном java-приложении (консоли) вам нужно создать и передать много экземпляров класса. Весной этого не нужно. Вы скажите весне (в определениях xml), как создать класс z java (например: какие у него есть аргументы), а затем, когда вы создаете компонент, вы можете просто попросить Spring дать вам экземпляр вашего класса. Таким образом, вы создаете контейнер из java-экземпляров (Beans), и вы можете использовать их для заполнения ваших потребностей (других Beans). Для получения дополнительной информации по этой теме вы можете использовать «зависимую инъекцию» Google. – Beri

+0

То, что я пытаюсь понять, как передать значение между бобами, например, я получаю Местная дата и им пытаются изменить формат этого: общественности Строка CurrentDateServiceFormat() { DateTimeFormatter форматировщик = DateTimeFormatter.ofPattern ("дд-ММ-гггг"); Строка formattedDateTime = dateTime.format (formatter); return formattedDateTime; } } и dateTime должно быть равно значению предыдущего компонента, который, по моему мнению, является текущей датой, которую я получил с помощью метода getCurrentDate? Но как я могу теперь передать его следующему методу – Monty