Учитывая, что устаревшее приложение имеет 1500 spring.xmls. Я хочу написать модульный тест для службы. Я глубоко в аду зависимости. Я должен принять приложение как есть, выхода нет.
Итак, мы используем spring-3.something и mockito-1.9, и мне нужен хороший способ протестировать сервис. В более новом коде активно используется аннотация @Autowired.
Косвенно сервис использует ~25 хелперов (фабричные методы и т.д.), которые я на самом деле хочу использовать в тесте, и ~25 объектов, которые мне не интересны для этого теста.
В настоящее время я пытаюсь настроить контекст так, как описано выше, но меня смущают эффекты @Mock, @InjectMocks, @Autowired.
Мой тест приведен ниже. Мне нужна помощь, чтобы настроить его правильно.
Вопросы:
- каков фактический эффект @InjectMocks?
- как я могу решить (технически), какие автосвязанные bean-компоненты действительно используются, а какие заменены макетами?
- Я знаю, что злоупотребляю имитациями для получения подделок. Есть ли более простой способ получить подделки в однострочниках?
- *Обратите внимание, что я хочу понять это, поскольку у меня есть множество таких сервисов... *
Вот мой образец:
@ContextConfiguration(locations = {
"classpath:/some/path/MainTestConfig.spring.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
public class SampleTest {
// *** Uninteresting Dependencies to be mocked *** //
@Mock Mock1 mock1;
@Mock Mock2 mock2;
/** Service under test */
@Autowired
SomeService service;
// *** Tightly coupled helpers to be used *** //
@Autowired Helper1 helper1
@Autowired Helper2 helpr2
@Before
public void setup() {
MockitoAnnotations.initMocks(SampleTest.class);
}
@Test
public void testSample() {
// prepare dummy context
SomeContext context = new Context();
// define expected result
int expectedValue = 42;
//execute method under test, record result
Result actualResult = service.execute(context);
//make assertions on result
assertTrue(actualResult.getSomething()==expectedValue);
}
}
mock1иmock2, которые кажутся неуместными в вашем тесте, поскольку они не имеют значения. Плюс помощники, похоже, не используются, проверено в тесте. Если все подключено к пружине, зачем вам это нужно. Я считаю, что вместо этого вы должны издеваться над тесно связанными помощниками и проверять взаимодействие. Кроме того, в конечном итоге вы можете написать этот тест как большой тест функциональности / функций, то есть не модульный тест или интеграционный тест, поэтому он будет помещен в какой-то другой пакет, чтобы показать разницу вашим коллегам. - person Brice   schedule 15.04.2013