2013-03-18 2 views
1
private ServiceImpl() { 
    // TODO Auto-generated constructor stub 

    reMgr = (ReManager) SpringContext.getBean("reManager"); 

Я хочу издеваться над этим методом, это частный конструктор, который инициализирует springContext. Я устанавливаю beanfactory через мой тестовый файл powermockito, используя beans.xml, где я указал компонент и его имя класса. Тем не менее этот метод не получает экземпляр reManager.Как насмехаться с springcontext?

+1

Что вы пытаетесь достичь? Потому что, если вы хотите получить экземпляр компонента Spring, чтобы использовать его в тесте Spring, предлагает поддержку тестирования, которая позволяет вам делать именно это. Вы можете создать контекст Spring в своих тестах с помощью класса AbstractJUnit4SpringContextTests и аннотации @ContextConfiguration. Я мог бы предоставить вам пример, если это то, что вы ищете – pvm14

+0

уверен. Я хочу использовать powermockito для тестирования. Можете ли вы привести мне примеры? – user2181531

+0

@ pvm14: Было бы здорово, если бы вы также дали мне полезные ссылки – user2181531

ответ

1

Если вы хотите сделать, это создать экземпляр весеннего боба в одном из ваших тестов, для которого вам не нужно использовать powermockito. Вы могли бы сделать что-то вроде этого

@ContextConfiguration(locations = "/beans.xml") 
public class YourTestJUnit4ContextTest extends AbstractJUnit4SpringContextTests { 

private ReManager reManager; 

@Before 
public void init() { 
    reManager= (ReManager) applicationContext.getBean("reManager"); 
} 

@Test 
public void testReManager() { 
    // Write here the code for what you wnat to test 
} 

}

beans.xml это файл, в котором вы определяете контекст приложения. Лучшее звено я могу думать прямо знать, это

Spring Testing Support

+0

Вы можете отбросить '@ Before' - как это будет выполняться для каждого теста - и просто вставьте' @ Autowired' в поле 'reManager' вместо этого. :-) – Jonathan

+0

Да, вы абсолютно правы Я просто пытался дать ответ, используя элементы, которые появились уже в вопросе – pvm14

2

Прости меня, если я что-то недоразумение, но если вы используете PowerMockito вы не можете сделать что-то вдоль линий:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(SpringContext.class) 
public FooTest {  
    @Test 
    public void foo() { 
     final ReManager manager = Mockito.mock(ReManager.class); 

     PowerMockito.mockStatic(SpringContext.class); 
     Mockito.when(SpringContext.getBean("reManager")).thenReturn(manager); 

     ... etc... 
    } 
} 

Дополнительная информация here о том, как проверить статическое поведение.

В качестве альтернативы ... Я хотел бы изменить дизайн, чтобы ваши зависимости передается классу испытуемого, например:

@Test 
public void foo() { 
    final ReManager manager = Mockito.mock(ReManager.class); 
    final ServiceImpl service = new ServiceImpl(manager); 

    ... etc... 
} 

Тогда нет необходимости PowerMock, ваше тестирование становится легче и там меньше связи между классы.

+0

Насколько я знаю, класс SpringContext не существует и эквивалентный справа один ApplicationContext не имеет статический метод getBean. Так скажите мне, для чего вам нужно статическое тестирование? ;-) – pvm14

+0

@ pvm14 Я предполагаю, что 'SpringContext' - это класс, созданный экспертом ... лично я бы позволил Spring приложить все зависимости для меня. Я согласен с вами в принципе! :-) – Jonathan

+0

Вы выигрываете ;-). Ваша абсолютно правильная, как обычно, моя дислексия снова обманула меня, и я не обратил внимания на этот SpringContext.getBean в вопросе – pvm14

Смежные вопросы