使用Spring Boot进行JUnit测试时Spring JavaMailSenderImpl上的ClassNotFoundException

时间:2016-12-07 13:47:26

标签: maven junit spring-boot javamail

我刚开始使用Spring Boot开发一个新项目,我正试图抓住它。我正在使用Spring Tool Suite,它为我创建了一个Spring Boot项目,并加载了一些依赖项,我知道我还需要进一步了解它(特别是Spring Batch和Spring Data)

这是我的pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- JDBC driver -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>6.1.0.jre8</version>
    </dependency>
</dependencies>

我一直在阅读参考文档,并知道我在某个时候需要邮件,所以我将其添加到我的application.properties文件中:

spring.mail.host=my.mail.host

然后我尝试使用mvn package构建应用程序,但它在测试中引发了错误。测试包括以下内容:

package its.idcard.batch;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class IdCardBatchApplicationTests {

    @Test
    public void contextLoads() {
    }

}

所以它所做的只是尝试加载应用程序上下文,但它在org.springframework.mail.javamail.JavaMailSenderImpl上的ClassNotFoundException失败。

我知道这是一个纯粹的测试问题,因为在添加一些Spring Data的东西,并在maven中跳过测试后,我的存根应用程序按预期运行(并查看生成的jar,我可以看到那个春天 - context-support-4.3.4-RELEASE.jar存在,包含违规类),因此它似乎是测试中的类路径问题,但我很难过。如果我在属性文件中注释掉spring.mail.host行,则测试运行没有问题。

任何想法都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我认为我在maven资源库中出现的问题似乎是腐败的jar文件。我决定在我的配置类中手动创建MailSender bean以查看它是否有帮助,但Eclipse标记了未找到的类,即使包含它的jar在maven依赖项中。然后我从命令行尝试了mvn compile,这给了我一个更有用的错误,指示了腐败的jar,所以我从我的本地存储库中删除了有问题的jar并让maven重新下载它们,现在我没有更长时间在上面的配置中得到错误。

希望这有助于其他人。