2014-09-15 4 views
2

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

Вот боб:

public class Goober { 

    @Autowired 
    private ObjectX prop1; 

    @Autowired 
    private ObjectY prop2; 


    //... rest of object 
} 

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

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/applicationContext-test.xml" }) 
public class GooberUT extends TestCase{ 

    @Tested @Autowired 
    Goober goober; 

    @Test 
    public void gooberTest (@Injectable prop1) { 


     // .. test and whatnot here 
    } 


    // .. setup/teardown etc 
} 

Проблема в том, что prop1 будет автопроводиться весной. Если я удалю @Autowired аннотацию из теста, то prop1 будет издеваться, но prop2 будет пустым.

Как я могу ввести одно свойство в Goober с помощью jMockit, а Autowire - другое?

ответ

1

Вы можете позволить Spring использовать prop1, а затем переопределить значение prop1 с помощью метода setProperty ReflectionTestUtils и ввести все, что вам нравится, программно.

1

условие ObjectY класс, а не интерфейс, вы можете иметь следующий тестовый класс:

public class GooberUT 
{ 
    @Tested(fullyInitialized = true) 
    Goober goober; 

    @Test 
    public void gooberTest(@Injectable ObjectX prop1) 
    { 
     // .. test and whatnot here 
    } 

    // .. setup/teardown etc 
} 

С @Tested(fullyInitialized = true), JMockit инстанцированием и внедрить все поля в тестируемом объекте, рекурсивно. Однако поля, соответствующие @Injectable, получат экземпляр mock.