[arquillian-issues] [JBoss JIRA] (ARQ-1303) Add Spring StaticApplicationContext
Jakub Narloch (JIRA)
jira-events at lists.jboss.org
Mon Feb 18 13:34:56 EST 2013
[ https://issues.jboss.org/browse/ARQ-1303?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12754828#comment-12754828 ]
Jakub Narloch commented on ARQ-1303:
------------------------------------
Ok,
But in such case, how can I use that in my test?
I would have to 'lookup' the bean that is being test each time from the application context. You won't be able to inject you configured beans into the the tests directly.
I was thinking about different aproach. How about resigning from class level annotations in favor of 'factory method'. Something like:
{code}
public class TestCase {
@SpringApplicationContext
public static ApplicationContext createApplicationContext() {
return ... // the application context could be created fully programticly
}
public void test() { }
}
{code}
In such way we could just @Autowire the beans in to the test class afterwards. Also we would have access to the ApplicationContext by simply adding @Autowired ApplicationContext field. It would work out of the box (likely this feature has been added somewhere in Spring 2.5.x version).
The other thing I was thinking was using the same convention as in Spring Test 3.1. You are able to define static inner class annotated with @Configuration and define your beans there.
Something like:
{code}
@SpringAnnotationConfiguration
public class TestCase {
@Configuration
static class ContextConfiguration {
@Bean
public SomeBean create() { }
}
public void test() { }
}
{code}
> Add Spring StaticApplicationContext
> -----------------------------------
>
> Key: ARQ-1303
> URL: https://issues.jboss.org/browse/ARQ-1303
> Project: Arquillian
> Issue Type: Enhancement
> Security Level: Public(Everyone can see)
> Components: Extension - Spring
> Reporter: omid pourhadi
> Assignee: Marius Bogoevici
> Priority: Minor
> Original Estimate: 1 week, 1 day
> Remaining Estimate: 1 week, 1 day
>
> It is a common way that developers programmatically register beans into context specially in testing rather than reading bean definitions from external configuration sources, in this case, you need to use StaticApplicationContext.
> As far as my experience concerned, there are some circumstances that you need to have populated context when you are testing
> 1. for registering mock objects into context
> let's assume we inject a DAO into a service and we want to mock DAO then test our service
> {code:title=Bar.java|borderStyle=solid}
> public class MockTest(){
> @Mock
> Dao dao;
> public void testMethod(){
> ctx.getBeanFactory().registerSingleton(dao.getClass().getName(), dao);
> }
> }
> {code}
> 2. for specifying classes not packages
> sometimes you need to create a spring context by only some specific classes from different packages not the whole packages.
> It might be good idea to have an annotation ClassToScan({}) to define whcih classes, you want to scan
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the arquillian-issues
mailing list