Tag: spring test

如何在Spring Boot测试中设置’headless’属性?

我正在测试使用Spring Boot和JavaFX(基于一些优秀的YouTubevideo来解释这一点)。 为了使它与TestFX一起工作,我需要创建如下的上下文: @Override public void init() throws Exception { SpringApplicationBuilder builder = new SpringApplicationBuilder(MyJavaFXApplication.class); builder.headless(false); // Needed for TestFX context = builder.run(getParameters().getRaw().stream().toArray(String[]::new)); FXMLLoader loader = new FXMLLoader(getClass().getResource(“main.fxml”)); loader.setControllerFactory(context::getBean); rootNode = loader.load(); } 我现在想测试这个JavaFX应用程序,为此我使用: @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) public class MyJavaFXApplicationUITest extends TestFXBase { @MockBean private MachineService machineService; @Test public void test() throws InterruptedException { […]

SpringJUnit4ClassRunner为每个测试初始化​​bean?

以下测试说明Spring将此测试bean初始化两次。 我希望有人可以告诉我为什么会这样,因为它应该只有一次。 这是测试: import org.apache.log4j.Logger; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.InitializingBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {} ) public class TestAfterPropsSet implements InitializingBean { private static final Logger logger = Logger.getLogger(TestAfterPropsSet.class); @Test public void test1() { logger.debug(“Test1”); } @Test public void test2() { logger.debug(“Test2”); } public void afterPropertiesSet() throws Exception { logger.debug(“Bean Initialized”); […]

如何在执行测试时阻止我的Spring Boot Batch应用程序运行?

我有一个Spring Boot Batch应用程序,我正在编写集成测试。 当我执行测试时,整个批处理应用程序运行。 如何只执行测试中的应用程序代码? 这是我的测试代码。 执行时,将运行整个批处理作业步骤(阅读器,处理器和编写器)。 然后,测试运行。 @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = BatchApplication.class)) @TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class }) public class StepScopeTestExecutionListenerIntegrationTests { @Autowired private FlatFileItemReader reader; @Rule public TemporaryFolder testFolder = new TemporaryFolder(); public StepExecution getStepExection() { StepExecution execution = MetaDataInstanceFactory.createStepExecution(); return execution; } @Test public void testGoodData() throws Exception { //some test code on one met […]

测试使用PersistentEntityResourceAssembler的自定义RepositoryRestController

我有一个RepositoryRestController ,它为一些持久性实体公开资源。 我的控制器上有一个方法,它使用PersistentEntityResourceAssembler来帮助我自动生成资源。 @RepositoryRestController @ExposesResourceFor(Customer.class) @RequestMapping(“/api/customers”) public class CustomerController { @Autowired private CustomerService service; @RequestMapping(method = GET, value=”current”) public ResponseEntity getCurrent(Principal principal Long id, PersistentEntityResourceAssembler assembler) { return ResponseEntity.ok(assembler.toResource(service.getForPrincipal(principal))); } } (举例说明,但它可以节省关于我的用例的无关细节的太多细节) 我想为我的控制器编写测试(我的实际用例实际上值得测试),并且我正在计划使用@WebMvcTest。 所以我有以下测试类: @RunWith(SpringRunner.class) @WebMvcTest(CustomerController.class) @AutoConfigureMockMvc(secure=false) public class CustomerControllerTest { @Autowired private MockMvc client; @MockBean private CustomerService service; @Test public void testSomething() { // […]

@WithUserDetails和spring boot 1.4 TestEntityManager问题

我有Spring Boot的TestEntityManager和@WithUserDetails注释的问题。 这是我的测试套件: public class AdvertisementAuthorizationTest extends AbstractIntegrationTest { private static final String IMPERSONATOR_EMAIL = “joe.hacker@gmail.com”; private final static String OWNER_OF_ADVERTISEMENT_EMAIL = “john.nice@gmail.com”; @Autowired private TestEntityManager testEntityManager; @Autowired private MockMvc mockMvc; private Advertisement advertisement; private UserAccount impersonator; private ObjectMapper mapper = new ObjectMapper(); @Before public void setUp() { advertisement = testEntityManager.persist(createAdvertisement(OWNER_OF_ADVERTISEMENT_EMAIL)); impersonator = testEntityManager.persist(createUserAccount(IMPERSONATOR_EMAIL)); } […]

@DataJpaTest需要在测试之外的类

在SpringBoot应用程序中,我想对存储库层进行一些测试。 @RunWith(SpringRunner.class) @DataJpaTest public class VisitRepositoryTest { @Autowired private TestEntityManager entityManager; @Autowired private VisitRepository visitRepository; … } 当我尝试从VisitRepositoryTest运行测试时,我收到有关DefaultConfigService的错误 com.norc.Application中的字段defaultConfigService需要一个无法找到的类型为“com.norc.service.DefaultConfigService”的bean。 那么这需要运行Application吗? 我试图在VisitRepositoryTest放置一个DefaultConfigService bean,但是不允许这样做。 这个类在我的应用程序中使用 @EntityScan(basePackageClasses = {Application.class, Jsr310JpaConverters.class}) @SpringBootApplication @EnableScheduling public class Application implements SchedulingConfigurer { @Autowired private DefaultConfigService defaultConfigService; … } 如何管理? 编辑 在我的应用程序中,我在cron选项卡中使用此类: @Service public class DefaultConfigServiceImpl implements DefaultConfigService { private final DefaultConfigRepository defaultConfigRepository; […]

不能使用Spring进行JUnit测试

我的测试定义如下: package com.mytest; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class SpringTestCase { @Test public void testSave_success() { fail(“Not implemented”); } } 我的目的是运行此测试并失败! 我的测试的spring配置文件位于: /com/mytest/SpringTestCase-context.xml 我的spring配置文件的内容如下: 当我运行我的测试时,我得到以下exception: java.lang.NoClassDefFoundError: org/springframework/core/AttributeAccessorSupport at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) at org.springframework.test.context.TestContextManager.(TestContextManager.java:117) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:119) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:108) […]

Spring测试多次关闭嵌入式数据库

我正在使用h2嵌入式数据库,其定义如下: 我有两个测试: @RunWith(SpringJunit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(“classpath:h2-context.xml”) class Test1 {…} @RunWith(SpringJunit4ClassRunner.class) @ContextConfiguration(“classpath:h2-context.xml”) class Test2 {…} 在所有测试执行后,我确实在日志中看到: * Closing org.springframework.context.support.GenericApplicationContext * Closing org.springframework.web.context.support.GenericWebApplicationContext * Closing JPA EntitiManagerFactory for Persistance unit … * Closing JPA EntitiManagerFactory for Persistance unit … 因此,在执行所有测试后,实体管理器将针对每个上下文关闭。 我知道spring缓存上下文文件,所以我猜h2 bean在两个测试中共享。 问题是 :有时我得到奇怪的exception,例如: H2EmbeddedDatabaseConfigurer: Could not shutdown embedded database jrg.h2.jdbc.JDBCSQLException: The database has been closed [90098-179] 我怎么能解决这个问题? […]

如何为所有测试初始化​​Spring applicationContext一次

我有一组需要弹簧上下文的测试。 为了快速执行测试,我想确保Spring上下文只被初始化一次,然后所有的测试应该针对这个上下文运行,然后它应该关闭。 我已经尝试过以下方法: 使用@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文 使用@RunWith(SpringJUnit4ClassRunner.class)和@TestExecutionListeners({MyTestExecutionListener.class})和一个手写的测试执行监听器来初始化spring上下文并将其注入具体的测试类 在基类和静态字段中使用@BeforeClass侦听器来存储spring上下文,并使用@AfterClass来关闭 使用这三种方法,弹簧上下文似乎不止一次初始化,这需要花费很多时间。 似乎JUnit在运行测试时卸载了类,因此静态字段的内容有时会丢失。 有没有办法确保弹簧上下文只初始化一次?

对不同的测试方法使用不同的Spring测试上下文配置

我们有一个基于Spring的JUnit测试类,它使用内部测试上下文配置类 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = ServiceTest.Config.class) public class ServiceTest { @Test public void someTest() { … @Configuration @PropertySource(value = { “classpath:application.properties” }) @ComponentScan({ “…” }) public static class Config { … 最近已向Service类引入了新function,应将相关测试添加到ServiceTest中。 然而,这些还需要创建一个不同的测试上下文配置类(现有Config类的内部相当复杂,如果可能的话,将其更改为新旧测试似乎非常困难) 有没有办法实现一个测试类中的某些测试方法将使用一个配置类,而其他方法将使用另一个? @ContextConfiguration似乎只适用于类级别,因此解决方案可能是为新测试创建另一个测试类,它将使用自己的上下文配置类; 但这意味着通过两个不同的测试类覆盖相同的Service类