The Spring framework is non-invasive, so your code can be completely POJO (plain old java object). You can directly use Junit to complete most unit tests. However, it is difficult to test the integration. At the unit test level, you can mock some dependent objects, but the actual dependent objects are required for integration testing, and these objects are under the control of the Spring container. So how can we conduct integration testing when Spring is introduced? Don't worry. The Spring framework has come up with this for us, and it provides the integrated testing function. Let's take the last simple example for an experiment. First, introduce the dependency on junit and spring-test libraries. <Dependencies> <dependency> <groupId> junit </groupId> <artifactId> junit </artifactId> <version> 4.11 </version> <scope> test </scope> </ dependency> <groupId> org. springframework </groupId> <artifactId> spring-test </artifactId> <version> 4.0.2.RELEASE </version> </dependency> </dependencies> the spring-test module is specially designed for use. auxiliary class library for integration testing for spring framework projects. It has the following purposes. Cache the Spring IOC container during testing to improve the speed of integration testing. Provides the dependency injection function for the test instance. Provides Transaction Management in integration testing. Some helper libraries are provided to help developers better compile integration tests. Create an ApplicationTest. java class. The Code is as follows. Package huangbowen.net; import huangbowen.net. service. cinema; import org. junit. test; import org. junit. runner. runWith; import org. springframework. beans. factory. annotation. autowired; import org. springframework. context. applicationContext; import org. springframework. test. context. contextConfiguration; import org. springframework. test. context. junit4.SpringJUnit4ClassRunner; import static org. junit. assert. asser TNotNull; @ RunWith (SpringJUnit4ClassRunner. class) @ ContextConfiguration (classes = {Application. class}) public class ApplicationTest {@ Autowired private ApplicationContext applicationContext; @ Autowired private Cinema cinema; @ Test public void shouldGetCinemaInstance () {Cinema cinema = applicationContext. getBean (Cinema. class); assertNotNull (cinema) ;}@ Test public void shouldGetAutowiredCinema (){ AssertNotNull (cinema);} @ Test public void shouldGetMovieServiceInstance () {assertNotNull (cinema. getMovieService (); assertThat (cinema. getMovieService (), instanceOf (DefaultMovieService. class);} in this example, ApplicationTest has two annotations. @ RunWith (SpringJUnit4ClassRunner. class ). is a custom JUnit runner provided by the Spring TestContext framework. In this way, you can obtain ApplicationContext in the test class, or even directly perform dependency injection, and use the transaction control test method for execution. After @ RunWith (SpringJUnit4ClassRunner. class) is declared, the @ ContextConfiguration annotation is also declared. This annotation is used to tell the test class Spring configuration in this project. Here we pass in the Application. class because Spring bean is configured in this class. Then you can use the powerful @ Autowired function in the test class. We have written three test methods. The first is to get ApplicationContext through the Autowired function, and the second is to get cinema directly through the Autowired function, the third is to verify that MovieService in Cinema is correctly injected.