Spring在IDEA15上测试过程

原创,转载请添加链接

此篇记录在IDEA15中进行Spring测试过程中遇到的问题


在从Windows系统转用Mac的过程中,开发环境的变换也是造成早期配置的困难问题之一。

原先在Windows系统中,使用的Eclipse,换了Mac之后,因为朋友极力推荐使用IDEA来进行JavaEE开发,于是开始使用上了IDEA。

最先配置环境不难,包括java,maven,tomcat,这些配置按照网上教程进行,问题不大。

之后,要进行测试是否能进行Spring的HelloWorld。就碰到了Junit的问题。

Junit在IDEA问题


前期配置

在Eclipse中使用Junit时极其简单的,只需在需要测试的方法上写上注解@Test 然后右击Run as Junit即可。

而在IDEA上就碰到了:我在测试方法上使用注解@Test,本以为IDEA也会像Eclispe一样出现提示import org.junit.*的信息

可惜,并没有。然而一些培训机构的视频都是直接通过@Test运行测试。所以也打算在IDEA上使用这种方式。

于是,开始查资料与请教使用过IDEA的朋友。

测试类路径

朋友给的指导是,在与resourse文件同级目录上在建立与测试方法相同的路径文件。

Alt text

首先我将main下面的java文件设置为Sourse文件,只有经过此过程程序才能运行,具体设置过程为Fiel–>Project Structure –> Modules –> Make as Sourse

Alt text

如图所示,java文件已经成为蓝色即完成此过程。

其次,如项目文件图结构中所示,java文件夹下com.hgx.springtest 包中的HelloWorld1是我需要测试的类

而在图最后又个test文件夹,内的包名与java文件夹完全相同,包中的HelloWorld1Test即为测试类

你可以新建一个test文件夹,然后右击选中 Maek Directory as –> Test Resourse Root ,IDEA会自动帮你生成测试包,路径即为你需要测试类的路径。

/看似简单,花了我大半天/

测试类代码

这步做完之后,就可以开始写测试代码了。

首先是需要测试的代码,因为是简单的使用Spring框架来进行此操作,故只有两个类HelloWorld,HelloWorld1

HelloWorld1即调用HelloWorld这个bean,该bean已经在配置文件中写好了,因为极其简单,对有基础的使用者来说不在话下,故不做详解。

/Spring配置文件appliactionContext.xml放的位置也有讲究的,若你在测试的过程中出现找不到applicationContext.xml错误,请往下阅读/

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

package com.hgx.springtest;

import com.hgx.springtest.HelloWorld1;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
* Created by huangguoxin on 16/1/15.
*/

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext.xml"})
public class HelloWorld1Test extends TestCase{

// @Autowired
// ApplicationContext context;

@Test
public void testhello1() {


ApplicationContext context =
new ClassPathXmlApplicationContext("applicationContext.xml");

HelloWorld hello = (HelloWorld) context.getBean("helloWorld");

//Assert.assertEquals(1,hello.hello());

}

}

Maven的配置文件

相信使用过Spring自带的测试的朋友对这段代码不陌生,我也不再解释。对于初学者或者刚开始使用IDEA的朋友来说,在使用前必须先导入所依赖的jar包。我是使用Maven进行导入的,导入的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>com.huangguoxin</groupId>
<artifactId>mavenTest</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>mavenTest Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.4.RELEASE</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.huangguoxin</groupId>
<artifactId>mavenTest</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>



</dependencies>

</project>

下载完毕后即可使用jar包,进行测试。

我们来跑一下

首先是配置Junit,如下图:

Alt text

读取applicationContext.xml配置文件时出错,及解决办法

完成之后,点开始箭头,发现会报错:

1
2
3
4
5

org.springframework.beans.factory.BeanDefinitionStoreException:
IOException parsing XML document from class path resource [applicationContext.xml];
nested exception is java.io.FileNotFoundException:
class path resource [applicationContext.xml] cannot be opened because it does not exist

这样一个错误是,IDEA找不到Spring的配置文件的路径,因为根据在Eclipse中的习惯,我们通常将appliactionContext.xml文件放在使用的包中,而IDEA与Eclipse不同,要求配置文件需放在单独的resource目录下,并且将其配置完成,才能读取其中内容。

解决办法

将applicationContext.xml文件放在resource文件下面,如下图中的结构所示:

Alt text

通过该方法,在运行时,IDEA会在target文件下的classes生成配置文件,这样程序才能找到配置文件并使用。

按照Maven约定,项目的主目录位于src/main/resources、src/main/java中,测试目录位于src/main/test 中,所以我们在最终打包项目的时候,只包含主目录代码,不会包含测试目录里的代码,而测试目录里的代码只会在测试时候用到。

使用结果如下:

Alt text

/测试步骤与前边相同,故不再赘述/

解决过程体会

作为一个刚从Eclipse转到IDEA的使用者的角度来说,前期的使用时坠痛苦的,识得唔识得噶?

而且大多数的网上教程与博客都是在Eclipes IDE下的配置,从头到尾都要自己去找解决办法。

有些解决办法适用你的环境,有些并不适用,需要你辩证地考虑问题,比如:

很多博客在解决找不到appliactionContext.xml问题时,都提到需要配置web.xml文件,但是在我这里的问题中,并不需要。(可能还未碰到:)

所以,不要总想着把IDEA批判一番,我只能说一句:“IDEA比Eclipse好用”,你们说吼姆吼啊?

由于是初学者,文中错误之处,希望各位大大能够指正,并且交流。

郭欣 写于 2016年1月18日