Tag: spring test

使用TestExecutionListener时,Spring测试注入不起作用

我想将自定义的TestExecutionListener与SpringJUnit4ClassRunner结合使用,在我的测试数据库上运行Liquibase架构设置。 我的TestExecutionListener工作正常但是当我在我的类上使用注释时,测试中的DAO注入不再起作用,至少实例为null。 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { “file:src/main/webapp/WEB-INF/applicationContext-test.xml” }) @TestExecutionListeners({ LiquibaseTestExecutionListener.class }) @LiquibaseChangeSet(changeSetLocations={“liquibase/v001/createTables.xml”}) public class DeviceDAOTest { … @Inject DeviceDAO deviceDAO; @Test public void findByCategory_categoryHasSubCategories_returnsAllDescendantsDevices() { List devices = deviceDAO.findByCategory(1); // deviceDAO null -> NPE … } } 听众很简单: public class LiquibaseTestExecutionListener extends AbstractTestExecutionListener { @Override public void beforeTestClass(TestContext testContext) throws Exception { final LiquibaseChangeSet annotation […]

spring-boot testing – 多个测试可以共享一个上下文吗?

我创建了多个spring-boot测试类, (使用spring-boot 1.4.0 ) 。 FirstActionTest.java : @RunWith(SpringRunner.class) @WebMvcTest(FirstAction.class) @TestPropertySource(“classpath:test-application.properties”) public class FirstActionTest { @Autowired private MockMvc mvc; // … } SecondActionTest.java : @RunWith(SpringRunner.class) @WebMvcTest(SecondAction.class) @TestPropertySource(“classpath:test-application.properties”) public class SecondActionTest { @Autowired private MockMvc mvc; // … } 运行测试时: mvn测试 它似乎为每个测试类创建了一个弹簧测试上下文,我猜这是不必要的。 问题是: 是否可以在多个测试类之间共享一个弹簧测试上下文,如果是,如何?

‘application.yml’中的Spring Boot属性未从JUnit Test加载

我究竟做错了什么? 我正在使用这个小的独立应用程序运行并找到我的src/main/resources/config/application.yml 。 相同的配置在JUnit中不起作用,见下文: @Configuration @ComponentScan @EnableConfigurationProperties public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class); } } @Component @ConfigurationProperties public class Bean{ … } 以下不起作用, application.yml中的相同属性未加载, Bean只有null值: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestApplication.class) public class SomeTestClass { … }

使用maven-surefire运行测试时,在@BeforeClass之后发生Spring-Autowiring

我在dependency injection(Spring autowiring)和maven-surefire方面遇到了一些问题。 以下测试在使用TestNG在eclipse中运行时没有问题:注入service-object,然后调用@BeforeClass -method。 @TransactionConfiguration(defaultRollback=false) @ContextConfiguration(locations={“/testContext.xml”}) public class MyServiceTest extends AbstractTransactionalTestNGSpringContextTests { @Autowired private MyService service; @BeforeTest public void setup() { System.out.println(“*********************”+service); Assert.assertNotNull(service); } 但是,当我使用maven-surefire运行相同的测试用例时,首先调用setup(),这会导致测试失败: [INFO] — maven-surefire-plugin:2.7.2:test (default-test) @ myserver — [INFO] Surefire report directory: D:\… ——————————————————- TESTS ——————————————————- Running TestSuite **************************null 2011-03-04 11:08:57,462 DEBUG ionTestExecutionListener.prepareTestInstance – Performing dependency injection for test context […]

春季dependency injectionSpring TestExecutionListeners无法正常工作

我怎样才能将Springdependency injection到我写的扩展AbstractTestExecutionListener的TestExecutionListener类中? Spring DI似乎不适用于TestExecutionListener类。 问题示例: AbstractTestExecutionListener: class SimpleClassTestListener extends AbstractTestExecutionListener { @Autowired protected String simplefield; // does not work simplefield = null @Override public void beforeTestClass(TestContext testContext) throws Exception { System.out.println(“simplefield ” + simplefield); } } 配置文件: @Configuration @ComponentScan(basePackages = { “com.example*” }) class SimpleConfig { @Bean public String simpleField() { return “simpleField”; } } […]

如何让@WebMvcTest与OAuth一起工作?

我只是很难让我的控制器unit testing工作,因为,IMO,如果使用OAuth, Spring doc中的内容是不够的。 就我而言,它是与JWT的Oauth2。 我尝试使用@WithMockUser , @WithUserDetails ,甚至用@WithSecurityContext和自定义UserSecurityContextFactory定义我自己的注释,但是当安全表达式被评估时,总是在UserSecurityContext中获得匿名用户,无论我在工厂设置测试上下文… 我提出了我刚才提出的解决方案,但由于我不确定嘲笑TokenService是最有效/最干净的方式,请随时提供更好的解决方案。

如何使用spring的MockMultipartHttpServletRequest? 得到“没有找到多部分边界”

显然我没有正确使用这个测试夹具。 我的servlet在tomcat中运行得很好,但是当我尝试使用这个mock时,找不到多部分边界。 “请求被拒绝,因为没有找到多部分边界”。 这里有一个答案显示如何使用文本文件来使用它,但该答案明确设置边界字符串并将文件嵌入为test。 我想我不需要手工处理像mockrequest.addFile (…)这样的方法 我没有在这里设置什么,或者我怎么做错了? @org.testng.annotations.Test public void testDoPost() throws Exception { MockMultipartFile file = new MockMultipartFile(“test.zip”, “test.zip”, “application/zip”, MyServletTest.class.getResourceAsStream(“/test.zip”)); MockMultipartHttpServletRequest mockRequest = new MockMultipartHttpServletRequest(); mockRequest.addFile(file); mockRequest.set mockRequest.setMethod(“POST”); mockRequest.setParameter(“variant”, “php”); mockRequest.setParameter(“os”, “mac”); mockRequest.setParameter(“version”, “3.4”); MockHttpServletResponse response = new MockHttpServletResponse(); new MyServletTest().doPost(mockRequest, response); // BOOM ! } 这是例外 Caused by: blablah: the request was […]

junit测试中的spring-data-jpa beanvalidation

在我最近的工作中,我使用了spring-data-jpa来利用提供的存储库。 当涉及到集成测试时,我无法配置(我假设)测试的spring上下文,并且作为结果beanvalidation在我的测试中不起作用。 我知道我可以注入validation器,并对我的注释进行unit testing,但事实并非如此。 我正在编写集成测试,并希望在支持DB的情况下测试存储库。 我准备了简单的项目来显示所有必要的项目文件。 当我运行测试时,2失败了,我不知道为什么,类路径上存在hibernatevalidation器。 Failed tests: insertWrongEmail(com.example.core.data.jpa.UserRepositoryTest): Expected ConstraintViolationException wasn’t thrown. insertToShortPassword(com.example.core.data.jpa.UserRepositoryTest): Expected ConstraintViolationException wasn’t thrown. [..] Apr 23, 2013 5:00:08 PM org.hibernate.validator.internal.util.Version INFO: HV000001: Hibernate Validator 4.3.1.Final 源代码和mvn测试输出如下。 预先感谢您的帮助。 Java类(我删除了注释,geters,seters,equals,hashCode,toString等): BaseEntity package com.example.core.data.jpa; import javax.persistence.*; @MappedSuperclass public abstract class BaseEntity { public static final String SEQUENCE = “global_seq”; @Id @SequenceGenerator(name = […]

如何在Spring Boot中模拟数据库连接以进行测试?

情况: 我在微服务中使用Spring Cloud和Spring Boot ,微服务正在加载数据库配置信息来配置连接。 我创建了一个测试,以使用Swagger获取其余接口以获取文档。 我想禁用数据库配置的加载,因为没有必要。 这是代码: @WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {Application.class, Swagger2MarkupTest.class}, loader = SpringApplicationContextLoader.class) @ActiveProfiles(“test”) public class Swagger2MarkupTest { @Autowired private WebApplicationContext context; private MockMvc mockMvc; @Autowired protected Environment env; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build(); } @Test public void convertSwaggerToAsciiDoc() throws Exception { this.mockMvc.perform(get(“/v2/api-docs”).accept(MediaType.APPLICATION_JSON)) .andDo(Swagger2MarkupResultHandler.outputDirectory(“target/docs/asciidoc/generated”) .withExamples(“target/docs/asciidoc/generated/exampless”).build()) .andExpect(status().isOk()); } } […]

Spring的MockMvc是用于unit testing还是集成测试?

Spring有两个MockMvc设置: 独立设置 WebApplicationContext设置 一般来说,MockMvc用于什么样的测试? 单位还是整合? 或两者? 我正确地说,使用独立设置(在Spring的应用程序上下文之外运行)允许您编写unit testing,并且使用WebApplicationContext设置可以编写集成测试吗?