Page 1 of 1

Junit, Mockito und Spring ApplicationContext: Probleme, eine Eigenschaft zu verspotten

Posted: 05 Mar 2025, 04:04
by Anonymous
Problembeschreibung: Ich habe Probleme, ein Mock für eine bestimmte Federschein einzurichten, um den richtigen Speicherort für Mock -Test in meinem Entwicklungsfeld zurückzugeben, anstatt das Runtime Web Application Root. Ich bin sicher, ich mache etwas Dummes mit meinem Refactoring. Ich hoffe, jemand sieht es. Der Quartz -Job funktioniert einwandfrei und holt den Spring ApplicationContext OK ab. Das einzige, was noch übrig ist, ist, eine Konfigurationseigenschaft für den Test- oder Laufzeitort zu verkaufen, an dem sich die Webressourcen befinden. : < /p>

junit 4, feder 3.1, quarz, java 8, mockito < /p>

Die Schnittstelle: < /p>

Code: Select all

public interface ITitle {
/**
* Gets the root of the application.
* @return location String
*/
public String getRuntimeLocation();
}
< /code>

Die Implementierung: < /p>

@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;
}
}
< /code>

Der Unit -Test < /p>

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;
}
< /code>

} < /p>

Die Spring XML -Datei < /p>
















< /code>

< /p>

Nach dem Ausführen des Tests erhalte ich dies im Protokoll: < /p>

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/
Die Frage ist: Gibt es etwas Offensichtliches, dass ich falsch mache, um den beabsichtigten Pfad/Benutzer/me/dev/Workarea/? Ich bin mir nicht sicher, wie ich diesen speziellen Schritt neu aufbauen soll. < /P>

Code: Select all

    when(config.getRuntimeLocation()).thenReturn(“/Users/me/dev/workarea/");