Skip to content

Instantly share code, notes, and snippets.

@reyabreu
Created September 11, 2019 11:00
Show Gist options
  • Save reyabreu/4c894d55b993c65ea36ecfb133eaf1b3 to your computer and use it in GitHub Desktop.
Save reyabreu/4c894d55b993c65ea36ecfb133eaf1b3 to your computer and use it in GitHub Desktop.
How to unit test Spel (Spring Expression Language) expressions against standard web context
@RunWith(SpringRunner.class)
@TestPropertySource("classpath:server-test.properties")
public class SpelUnitTest {
public static final Logger logger = LoggerFactory.getLogger(Sample.class);
@Value("${testclock.start}")
private String startTime;
@Autowired
private BeanFactory beanFactory;
@Autowired
private StandardEvaluationContext _evaluationContext;
private ExpressionParser _parser = new SpelExpressionParser();
@Test
public void foo() {
final String randomPhrase = _parser.parseExpression("T(java.lang.Math).random()")
.getValue(_evaluationContext, String.class);
logger.info("randomPhrase: random number is {}", randomPhrase);
}
@Test
public void bar() {
final Instant value = _parser.parseExpression("T(java.time.Instant).parse('2015-05-15T12:23:45.678Z')")
.getValue(_evaluationContext, Instant.class);
logger.info("bar: {}", value);
}
@Test
public void fizz() {
final Instant value = _parser.parseExpression("T(java.time.Instant).parse(@environment.getProperty('testclock.start'))")
.getValue(_evaluationContext, Instant.class);
logger.info("fizz: {}", value);
}
@Test
public void buzz() {
Assertions.assertThat(startTime).isNotBlank();
logger.info("buzz: {}", startTime);
}
@TestConfiguration
public static class TestConfig {
@Bean
public BeanFactoryResolver beanFactoryResolver(BeanFactory beanFactory) {
return new BeanFactoryResolver(beanFactory);
}
@Bean
public StandardEvaluationContext evaluationContext(BeanFactoryResolver beanFactoryResolver) {
final StandardEvaluationContext evaluationContext = new StandardEvaluationContext();
evaluationContext.setBeanResolver(beanFactoryResolver);
return evaluationContext;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment