如何使用Spring自动装配概括JMockit测试

朱利安·科伊(Julian Coy)

因此,我想对几种不同的Dao方法使用通用测试。在Dao内部,我将保存功能实现为独立于实体,因此我认为最好也使测试独立于实体。目前,我的测试之一具有以下条件,测试与自动连接

@Injectable
public EntityManager em;

@Tested
SyncClaimDao syncClaimDao = new SyncClaimDaoImpl();

@Before
public void setUp() {
    Deencapsulation.setField(syncClaimDao, "em", em);
}

private void testSaveEntity (Class T) {
    // Existing claim happy path
    new Expectations() {
        {
            em.contains(any); result = true;
            em.merge(any);
        }
    };

    if (T.isInstance(SyncClaimEntity.class)) {
        Assert.assertTrue(syncClaimDao.saveClaim(new SyncClaimEntity()));
    } else if (...) {...}
}

@Test
public void testSaveClaim() {
    testSaveEntity(SyncClaimEntity.class);
}

SyncClaimDaoImpl

@Override
public boolean saveClaim(SyncClaimEntity claim) {
    return saveEntity(claim);
}

private boolean saveEntity(Object entity) {
    boolean isPersisted = false;

    try {
        isPersisted = em.contains(entity);

        if (isPersisted) {
            em.merge(entity);
        } else {
            em.persist(entity);
            em.flush();
            isPersisted = true;
        }
        logger.debug("Persisting " + entity.getClass().getSimpleName() + ": " + entity.toString());
    }
    catch (NullPointerException ex) {
        ...
    }
    catch (IllegalArgumentException ex) {
        ...
    }

    return isPersisted;
}

运行测试时,我看到以下错误:

mockit.internal.MissingInvocation: Missing invocation of:
javax.persistence.EntityManager#contains(Object)
   with arguments: any Object
   on mock instance: javax.persistence.$Impl_EntityManager@44022631
    at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ... 4 more 
Caused by: Missing invocation
    at [redacted].dal.dao.SyncClaimDaoImplTest$1.<init>(SyncClaimDaoImplTest.java:48)
    at [redacted].dal.dao.SyncClaimDaoImplTest.testSaveEntity(SyncClaimDaoImplTest.java:46)
    at [redacted].dal.dao.SyncClaimDaoImplTest.testSaveClaim(SyncClaimDaoImplTest.java:67)
    ... 10 more

现在,如果我将Expectations块移动到@Test方法中,如下所示:

@Test
public void testSaveClaim() {

    new Expectations() {
        {
            em.contains(any); result = true;
            em.merge(any);
        }
    };

    Assert.assertTrue(syncClaimDao.saveClaim(new SyncClaimEntity()));

我应该成功进行测试。我认为Test方法自动装配不能正确地确定我的期望。这就是为什么我看到缺少的调用错误的原因。

是否有人对如何概括我的期望有任何想法,以便我可以为广义方法创建更简单的测试?

罗杰里奥

我现在看到了错误:T.isInstance(SyncClaimEntity.class)Class#isInstance(Object)应该用的实例而不是类本身来调用方法因此,它总是返回false,因为SyncClaimEntity.class显然不是的实例SyncClaimEntity

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JUnit如何测试Spring自动装配构造函数?

来自分类Dev

如何使用时,自动装配测试类豆类@SpringBootTest

来自分类Dev

DAO测试-Spring + JPA自动装配问题

来自分类Dev

使用Mockito和Junit时如何自动装配Spring bean?

来自分类Dev

Spring JUnit测试被测试类中的自动装配变量

来自分类Dev

如何在Spring Boot MockMvc单元测试中模拟自动装配的依赖项?

来自分类Dev

使用TestNG和Spring上下文运行测试时,自动装配失败,结果为空

来自分类Dev

如何模拟Spring bean的自动装配列表?

来自分类Dev

使用 Spring 自动装配时创建 bean

来自分类Dev

将Spring服务自动装配到JUnit测试中

来自分类Dev

春季如何使用自动装配概念?

来自分类Dev

Mockito:如何在测试时模拟自动装配的变量

来自分类Dev

每次测试执行后如何清理自动装配的对象

来自分类Dev

如何将jmockit与spring的嘲笑mvcvc一起使用以测试控制器

来自分类Dev

使用Mockito,带有自动装配的ioC测试服务

来自分类Dev

Spring Boot如何在调用的方法中使用自动装配的类属性

来自分类Dev

使用Java config配置的自定义spring数据(mongo)存储库的自动装配如何工作?

来自分类Dev

Spring如何在不使用@Component或其他派生工具的情况下自动装配组件

来自分类Dev

Spring:如何避免将构造函数注入与自动装配的字段结合使用

来自分类Dev

Spring Boot如何使用src / test / resource /中的yaml文件自动装配bean

来自分类Dev

如果类在 Spring Boot 中自动装配,如何在静态区域中使用实例变量

来自分类Dev

使用带有JUnit4的JMockit测试Spring JDBC

来自分类Dev

在Spring中基于通用类型的自动装配。它是如何工作的?

来自分类Dev

如何在Spring中自动装配通用类型<T>的Bean?

来自分类Dev

如何指定在Spring自动装配默认豆?

来自分类Dev

如何在Spring中为自动装配提供基类?

来自分类Dev

如何在 Spring Boot Converter 中自动装配依赖项?

来自分类Dev

使用Java TimerTask进行Spring自动装配注释

来自分类Dev

Spring bean不使用@Component注释自动装配

Related 相关文章

  1. 1

    JUnit如何测试Spring自动装配构造函数?

  2. 2

    如何使用时,自动装配测试类豆类@SpringBootTest

  3. 3

    DAO测试-Spring + JPA自动装配问题

  4. 4

    使用Mockito和Junit时如何自动装配Spring bean?

  5. 5

    Spring JUnit测试被测试类中的自动装配变量

  6. 6

    如何在Spring Boot MockMvc单元测试中模拟自动装配的依赖项?

  7. 7

    使用TestNG和Spring上下文运行测试时,自动装配失败,结果为空

  8. 8

    如何模拟Spring bean的自动装配列表?

  9. 9

    使用 Spring 自动装配时创建 bean

  10. 10

    将Spring服务自动装配到JUnit测试中

  11. 11

    春季如何使用自动装配概念?

  12. 12

    Mockito:如何在测试时模拟自动装配的变量

  13. 13

    每次测试执行后如何清理自动装配的对象

  14. 14

    如何将jmockit与spring的嘲笑mvcvc一起使用以测试控制器

  15. 15

    使用Mockito,带有自动装配的ioC测试服务

  16. 16

    Spring Boot如何在调用的方法中使用自动装配的类属性

  17. 17

    使用Java config配置的自定义spring数据(mongo)存储库的自动装配如何工作?

  18. 18

    Spring如何在不使用@Component或其他派生工具的情况下自动装配组件

  19. 19

    Spring:如何避免将构造函数注入与自动装配的字段结合使用

  20. 20

    Spring Boot如何使用src / test / resource /中的yaml文件自动装配bean

  21. 21

    如果类在 Spring Boot 中自动装配,如何在静态区域中使用实例变量

  22. 22

    使用带有JUnit4的JMockit测试Spring JDBC

  23. 23

    在Spring中基于通用类型的自动装配。它是如何工作的?

  24. 24

    如何在Spring中自动装配通用类型<T>的Bean?

  25. 25

    如何指定在Spring自动装配默认豆?

  26. 26

    如何在Spring中为自动装配提供基类?

  27. 27

    如何在 Spring Boot Converter 中自动装配依赖项?

  28. 28

    使用Java TimerTask进行Spring自动装配注释

  29. 29

    Spring bean不使用@Component注释自动装配

热门标签

归档