Описание проблемы: у меня возникла проблема с настройкой макета для определенного компонента Spring, чтобы он возвращал правильное расположение ресурса макетного теста в моем блоке разработки, а не корень веб-приложения среды выполнения. Я уверен, что делаю что-то глупое во время рефакторинга. Надеюсь, кто-нибудь это увидит.
Я использую Quartz для выполнения задания через Spring. Задание Quartz работает нормально, и контекст приложения Spring работает нормально. Остается только подключить свойство конфигурации для места тестирования или среды выполнения, где расположены веб-ресурсы. :
JUnit 4, Spring 3.1, Quartz, Java 8, Mockito
Интерфейс:
public interface ITitle {
/**
* Gets the root of the application.
* @return location String
*/
public String getRuntimeLocation();
}
Реализация:
@Component("Title")
public class Title implements ITitle, ApplicationContextAware {
private String location;
/**
* Gets the root of the application.
* @return location String
*/
public String getRuntimeLocation() {
String location = "";
config = getConfig();
log.debug("Class Title --- Method getRuntimeLocation -- config is " + config );
location = config.getRuntimeLocation();
log.debug("Class Title --- Method getRuntimeMethod -- runtime location is " + location );
return location;
}
}
Модульный тест
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.generators.analytics.serialised.ITitle;
import java.io.File;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath*:/WEB-INF/conf/analytics-context.xml"
})
public class GeneratorTest {
private AnalyticsGenerator generator;
@Mock
private IConfig config;
@Mock
private ApplicationContext applicationContext;
@Mock
private ITitle title;
// Set a logger
private static Logger log = LoggerFactory.getLogger(GeneratorTest.class);
private JobExecutionContext job;
/**
* Initialises the test parameters.
*/
@Before
public void setUp() throws Exception {
//create a generator object
generator = new AnalyticsGenerator();
MockitoAnnotations.initMocks(this);
when(applicationContext.getBean("Query")).thenReturn(query);
when(applicationContext.getBean("Config")).thenReturn(config);
when(config.getRuntimeLocation()).thenReturn(“/Users/me/dev/workarea/");
generator.executeInternal(ctx);
}
/**
* Expected: Json exists
*/
@Test
public void testThatExecuteInternalCreatesAJsonFile() throws JobExecutionException {
generator.executeInternal(job);
File returnedJson = new File("classpath:/google-analytics.json");
Assert.assertNotNull("The JSON file does not exist", returnedJson );
}
/**
* Remove objects from memory.
*/
@After
public void tearDown() throws Exception {
generator = null;
}
}
Файл Spring XML
После запуска теста я получаю это в журнале:
11:51:43.020 [main] DEBUG com.generators.analytics.serialised.Title - Class Title --- Method getConfig -- applicationContext is org.springframework.context.support.GenericApplicationContext@57f23557: startup date [Tue Jan 24 11:51:31 GMT 2017]; root of context hierarchy
11:51:43.020 [main] DEBUG com.generators.analytics.serialised.Title - Class Title --- Method getConfig -- config is com.generators.analytics.Config@13d9cbf5
11:51:43.020 [main] DEBUG com.generators.analytics.serialised.Title - Class Title --- Method getRuntimeLocation -- config is com.generators.analytics.Config@13d9cbf5
11:51:43.020 [main] DEBUG com.generators.analytics.serialised.Title - Class Title --- Method getRuntimeMethod -- runtime location is /data/runtime/web/
Вопрос в том, есть ли что-то очевидное, что я делаю неправильно, чтобы получить намеченный путь /Users/me/dev/workarea/?
Думаю, мне нужно провести рефакторинг, чтобы извлечь местоположение из метода? Я не знаю, как реорганизовать этот конкретный шаг.
when(config.getRuntimeLocation()).thenReturn(“/Users/me/dev/workarea/");
Подробнее здесь: https://stackoverflow.com/questions/418 ... a-property
JUnit, Mockito и Spring ApplicationContext: проблема с издевательством над свойством ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно заставить Mockito 5 Inject работать с Junit 4 после обновления с Mockito 4.
Anonymous » » в форуме JAVA - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно заставить Mockito 5 Inject работать с Junit 4 после обновления с Mockito 4.
Anonymous » » в форуме JAVA - 0 Ответы
- 42 Просмотры
-
Последнее сообщение Anonymous
-