我试图测试我的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”)
我不确定,但我认为您需要将locations属性添加到ContextConfiguration注释中,在该注释中您可以指定存在所有bean的xml文件。此外,我猜获取所有用户的操作与数据库相关,因此添加TransactionConfiguration注释是很好的。因此,您应该有如下内容:
@ContextConfiguration(位置={"类路径:spring-config-junit.xml"})@TransactionConfiguration(transactionManager="transactionManager",defaultRollback=true)
根据您试图通过测试实现的目标,您需要编写单元测试或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)无关。如果配置正确,工具会很乐意运行它
您必须在测试开始前提供要初始化的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