当前位置: 首页 > 知识库问答 >
问题:

Spring测试和maven

闻人飞白
2023-03-14

我试图测试我的Spring Web应用程序,但我有一些问题。

我在maven中添加了一个测试类

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void testName() throws Exception {
        List<UserEntity> userEntities = userService.getAllUsers();

        Assert.assertNotNull(userEntities);
    }
}

但是当我尝试运行这个测试时,我在userService上得到了一个NullPointerException。IntelliJ say“无法自动连线。未找到'UserService'类型的bean。在添加@RunWith(SpringJUnit4ClassRunner.class)后,我遇到了此异常

java.lang.IllegalStateException: Neither GenericXmlContextLoader nor AnnotationConfigContextLoader was able to detect defaults, and no ApplicationContextInitializers were declared for context configuration

我怎样才能解决它?我想我需要在我的tomcat服务器上运行这个测试,但是如何部署IntelliJ进行测试呢?(如命令“mvn clean install tomcat7:仅运行war”)

共有3个答案

顾穆冉
2023-03-14

我不确定,但我认为您需要将locations属性添加到ContextConfiguration注释中,在该注释中您可以指定存在所有bean的xml文件。此外,我猜获取所有用户的操作与数据库相关,因此添加TransactionConfiguration注释是很好的。因此,您应该有如下内容:

@ContextConfiguration(位置={"类路径:spring-config-junit.xml"})@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)

步炯
2023-03-14

根据您试图通过测试实现的目标,您需要编写单元测试或Spring集成测试。

在后一种情况下,您需要将代码更改为:

@ContextConfiguration(locations = {"classpath:/applicationContext.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class UserServiceTest {

   @Autowired
   private UserService userService;

    //test whatever
}

在执行此类集成测试时,您可能希望钩住Spring概要文件机制。通过利用它,您将能够重用生产代码中使用的相同配置,同时有选择地替换某些bean(例如,通过使用内存中的数据库交换生产数据源)。

如果您使用的是Spring 4,那么条件会给您更多的灵活性。

我建议您好好阅读一下Spring测试留档的这一部分,以获得Spring集成测试可以为您做什么的概述。

您所展示的案例我不确定是否值得进行集成测试(关于UserService实际所做的事情的更多细节会给出更清晰的画面)。

例如,如果UserService使用User道,然后对道的结果执行一些自定义逻辑,则使用mockedUser道UserService创建单元测试将是一个不错的选择。

如果您使用构造函数注入为服务提供道,那么服务的构造是显而易见的。如果您通过@autowed使用字段注入(如果可以避免,则不应该使用),那么您需要通过反射注入模拟。这方面的一个超级实用程序是Spring的反射测试工具

然后您可以为UserDao创建一个集成测试,测试它从数据库正确读取数据的能力。

最后请注意,上面的注释与您如何运行测试(IDE或Maven)无关。如果配置正确,工具会很乐意运行它

巫化
2023-03-14

您必须在测试开始前提供要初始化的Spring上下文文件的位置。

测试班

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations = { "classpath:META-INF/your-spring-context.xml" })
public class UserServiceTest extends AbstractJUnit4SpringContextTests {

    @Autowired
    private UserService userService;

    @Test
    public void testName() throws Exception {
        List<UserEntity> userEntities = userService.getAllUsers();

        Assert.assertNotNull(userEntities);
    }
}

your-spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="userService" class="java.package.UserServiceImpl"/>

</beans>
 类似资料:
  • 需要对Oauth2客户端的集成测试的帮助。 设置: 具有受保护UI和API的客户端 完成所有密码验证并检索访问令牌的身份验证服务器 集成测试: 放心用于终点测试 在实现Oauth2之前,测试工作良好 Ole测试示例: 问题: 如何使此测试再次工作? 应如何更改res-assured设置以支持OAuth2? 是否需要模拟身份验证服务器,或者是否可以注入/mock安全上下文?

  • 目前我的工作解决方案是: =3.0.0=5.2.0 然而,当我通过Maven运行测试时,JUnit5测试被忽略了。 编辑: 测试类为:

  • 与许多Java应用程序一样,我们在应用程序中使用Freemarker来呈现电子邮件。我们发现我们的一些模板并没有像我们想象的那样呈现,因此我们意识到我们应该为模板呈现编写一些单元测试。我设置了测试,并立即收到一个FileNotFoundException:找不到模板“my/Template.ftl”。 我想这一定是一个既能解决问题又能轻松解决的问题。那是很多小时前的事了,我意识到我错了;据我所知,

  • 问题内容: 对反应式编程感兴趣,我玩了《构建反应式RESTful Web服务》指南。并希望转移前途并添加一些单元测试。 我尝试使用普通的Junit / Mockito测试来测试我的处理程序()。但是,由于它是反应性的,因此处理程序将返回。所以我不得不用它来测试状态,但是无法抽出他的身体来测试它。在网络上搜索解决方案时,似乎所有示例都使用。 我的问题是: 鉴于所有示例都用于测试反应性REST服务,并

  • 对反应性编程感兴趣,我玩了一点构建反应性RESTful网络服务指南。并希望将其移至原版本并添加一些单元测试。 我试图用普通的Junit/Mockito测试来测试我的处理程序()。但是,因为它是被动的,所以处理程序返回一个

  • 我正在与 Spring框架4.3.3 AspectJ 1.8.9 我有两个,一个用于而另一个用于。每种方法都使用了一个的依赖关系。 我有以下Rest方法 观察我使用的第二个参数 我有以下切入点: 以及以下建议: 通过 当我发送有效数据时: 如: 或者由 通过< code>Gradle报告,我可以确认< code>@Around建议的效果如何。它只是看着AdviceUpdateOne - Class