[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