簡體   English   中英

Spring Unit測試JPA存儲庫

[英]Spring Unit test JPA repository

我是Spring框架的新手。 我需要為JPA存儲庫編寫單元測試。 我正在嘗試簡單的存儲庫saveAndFlush()方法。 但我的存儲庫中沒有任何東西存 這是我的源代碼:

TestContext.class

@Configuration 
@PropertySource("classpath:log4j.properties") 
public class TestContext {

    @Bean
    public RoleService roleService() {
        return Mockito.mock(RoleService.class);
    }

    @Bean
    public RightService RightService() {
        return Mockito.mock(RightService.class);
    }

    @Bean
    public RoleRepository RoleRepository() {
        return Mockito.mock(RoleRepository.class); 
    }
}

RoleServiceTest.class

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestContext.class})
@WebAppConfiguration
public class RoleServiceTest {

    @Autowired
    private RoleRepository roleRepository;

    @Test
    public void TestServices() throws Exception {
        RoleDetails first = new RoleDetails();
        first.setId("1");
        first.setDescription("First Description");
        first.setName("First");
        roleRepository.saveAndFlush(new RoleEntity(first));
        roleRepository.save(new RoleEntity(first));
        List<RoleEntity> roles = new ArrayList<RoleEntity>();
        roles = roleRepository.findAll();
        System.out.println(roles);
        assertEquals(1, roles.size());
    }
}

並且錯誤:

java.lang.AssertionError: expected:<1> but was:<0>

我幾乎可以肯定,因為testContext.Class會出現問題。 我用這個類測試我的控制器,它運行良好,但現在我需要測試我的數據庫,我不知道如何修改contextConfiguration。 我希望somone會幫助我。 提前致謝!

問題來自TestContext確實。 您嘗試使用模擬對象保存對象,這是不正確的。

解決方案是使用真實的存儲庫。 為此,您需要按照以下步驟操作:

  1. @Repository注解注釋您RoleRepository與JpaRepository(RoleEntity,ID)(其中ID是你聲明的RoleEntity的ID類型)擴展類。
  2. 將RoleRepository添加到Context Configuration類(真實的,不是測試類)。 您可以通過添加@EnableJpaRepositories(value =“your.repository.package”)來完成此操作。
  3. 使用您用於配置基於Spring的項目的真實Context Configuration類,將RoleContext.class替換為RoleServiceTest類上的@ContextConfiguration批注。

我希望我的回答有所幫助,如果你還需要幫助,請隨時再問!

您的存儲庫是一個模擬對象。 根據定義,模擬對象是一個不執行通常應該執行的操作的對象,而是在測試中執行的操作。

要測試存儲庫,存儲庫必須是真實存儲庫。 因此,您的上下文類應該具有

@Bean
public RoleRepository RoleRepository() {
    return new RoleRepositoryImpl(); // or whatever the class implementing the repository is 
}

如果使用Spring Boot,創建​​一個Web應用程序,並且您正在運行Application.class中的main()方法,您可以使用:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class MyUnitTest {

    Some someInstance = new Some();

    @Autowired
    private SomeRepository someRepository;
}

@Test
public void testSomeClass() throws Exception {
    Some savedSome = someRepository.save(someInstance);
    assertEquals(1, someRepository.count());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM