Solved

how to write JUnit test cases for spring application  using annotations

Posted on 2013-11-20
13
737 Views
Last Modified: 2014-01-05
hi,
i have to write JUnit testcases for spring appln through annotations,can any one suggest advice,useful links to me.
0
Comment
Question by:srikotesh
  • 6
  • 5
13 Comments
 
LVL 35

Expert Comment

by:mccarl
ID: 39664483
The Spring documentation on testing is pretty good, although (to me at least) seems to not be covered in the best order. Therefore, I suggest to check out the docs here...

http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/testing.html

...but probably start reading from section "10.3.5 Spring TestContext Framework".


In a nutshell though, the annotations that will be of the biggest use to you are...
@RunWith(SpringJUnit4ClassRunner.class)
// This is a JUnit annotation enables Spring functionality



@ContextConfiguration({"/app-config.xml", "/test-config.xml"})
// If you use XML based Spring configuration

       or

@ContextConfiguration(classes={AppConfig.class, TestConfig.class})
// If you use JavaCofig based Spring configuration

Open in new window

Once you have this setup, you can use normal Spring @Autowired annotations to inject references from your Spring configuration into your test class, and then use the normal JUnit annotations to run your tests.


If you can provide more information about your unique situation/requirements we can probably help a little more too.
0
 
LVL 1

Author Comment

by:srikotesh
ID: 39682746
I've requested that this question be deleted for the following reason:

i know those steps
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39676882
You need to provide a proper explanation for deleting the question. What you have done is not sufficient. If you don't do that then the delete request will be stopped and you will need to close the question in a different way.
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39682747
I'm objecting to the deletion of this question, as I believe my comment (http:Q_28299158.html#a39664483) sufficiently answers the (very briefly worded) question. Also, the question author has made no attempt to follow up on my comment or ask additional questions. And finally, the (also very briefly worded) explanation for deletion is inadequate. Attempts to resolve this with the question author have been ignored.
0
 
LVL 1

Author Comment

by:srikotesh
ID: 39682820
sorry for that attempt actually i postponed  my practice. i need to test spring application using junit testcasese.

i created one testcase and i imported those two steps
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:data-servlet.xml"})
after  that i called one method i inserted hard code values finally i called service mehod

while running the junit test  i am getting error.

Failed to load ApplicationContext

parsing XML document from class path resource [data-servlet.xml]; nested exception is java.io.FileNotFoundException: class path resource [data-servlet.xml] cannot be opened because it does not exist

class path resource [data-servlet.xml] cannot be opened because it does not exist

any problem if i import the statement like this @ContextConfiguration(locations = {"classpath:data-servlet.xml"})
can u give a proper suggestion for me.
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 35

Expert Comment

by:mccarl
ID: 39684634
any problem if i import the statement like this
No, it appears that you are correctly using the ContextConfiguration annotation. The problem might be exactly where Spring is looking for the file.

Can you tell me the exact directory that your "data-servlet.xml" is located in? Also can you tell me the package name that this TestCase class has?
0
 
LVL 1

Author Comment

by:srikotesh
ID: 39691920
directory location for data-servlet.xml is:
WebContent/WEB-INF/data-servlet.xml

pkg name for Test class:
com.hcltech.poc.ets.test.ManagerPageControllerTest

pkg name for Service class:
com.hcltech.poc.ets.service.TaskServiceProvider
0
 
LVL 35

Accepted Solution

by:
mccarl earned 500 total points
ID: 39694254
Ah ok, so the problem is that your Webcontent/WEB-INF directories AREN'T on the classpath and so accessing the spring xml by the "classpath:data-servlet.xml" URL isn't possible. You may be able to get it to load by using "file:WebContent/WEB-INF/data-servlet.xml" as the URL to @ContextConfiguration


However, I think this may be an indication that you can/should organise your project in a slightly different way. What is the nature of your Junit test that you are trying to run? Do the truly need access to all the beans in your data-servlet.xml?

Typically, the above is not the case. You normally setup Junit to just test small units of your code, such as a Service object, and you mock out any DAO objects and other dependencies that they have. And then you Spring configuration works something like this... Your data-servlet.xml contains only the configuration specific to the "Web" part of your app, such as setting up controllers, views, configuring mappings, etc. And then any configuration of Service objects is moved out to a separate .xml file that IS on your classpath (such as src/main/resources if you are using maven, etc). At runtime the web app needs to access those Service objects, so your data-servlet.xml will contain a line such as <import resource="classpath:service-beans.xml" /> to bring those in. And then your unit tests can also load your Service objects by using the @ContextConfiguration annotation with a "classpath:" URL in a similar way to what you have been doing. This way, it means that you only load up JUST what you need for the unit tests and nothing more.
0
 
LVL 1

Author Comment

by:srikotesh
ID: 39756244
Thanks for your suggestions i have a habit like if i didn't get the solution for my question i will delete my question from the portal i think mccrl you saw only my answered questions previously i deleted many questions because of i didn't get exact input from experts.

I dont know A is the default rating just now i saw the ratings.
0
 
LVL 1

Author Closing Comment

by:srikotesh
ID: 39756248
i got the proper input from you.Thanks for your suggestion.
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39758334
@srikotesh,

Thanks for accepting, and explaining why your reasons for grading the way your did.

And to follow from what SouthMod posted, I didn't bring this up just for my own benefit, or to enforce the policy for sake of enforcing it, but to help you to hopefully get a high level of help from the other experts here. :)

Cheers
mccarl
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

A publishing tool, a Version Control System, or a Collaboration Platform! These can be some of the defining words for the two very famous web-hosting Git repositories: Bitbucket and Github. Git is widely used amongst the programmers and developers f…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
This video teaches viewers how to create their own website using cPanel and Wordpress. Tutorial walks users through how to set up their own domain name from tools like Domain Registrar, Hosting Account, and Wordpress. More specifically, the order in…

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now