文章目錄
  1. 1. 此篇记录在IDEA15中进行Spring测试过程中遇到的问题
  2. 2. Junit在IDEA问题
    1. 2.1. 前期配置
      1. 2.1.1. 测试类路径
    2. 2.2. 测试类代码
    3. 2.3. Maven的配置文件
  3. 3. 读取applicationContext.xml配置文件时出错,及解决办法
    1. 3.1. 解决办法
  4. 4. 解决过程体会

原创,转载请添加链接

此篇记录在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日

文章目錄
  1. 1. 此篇记录在IDEA15中进行Spring测试过程中遇到的问题
  2. 2. Junit在IDEA问题
    1. 2.1. 前期配置
      1. 2.1.1. 测试类路径
    2. 2.2. 测试类代码
    3. 2.3. Maven的配置文件
  3. 3. 读取applicationContext.xml配置文件时出错,及解决办法
    1. 3.1. 解决办法
  4. 4. 解决过程体会