【问题标题】:testException = [null] with Hibernate and SpringMVCtestException = [null] 与 Hibernate 和 SpringMVC
【发布时间】:2020-01-15 18:37:34
【问题描述】:

我正在尝试运行以下测试。 在这种情况下,只是一个空白测试来尝试它,但由于某种原因它不起作用。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfig.class)
@Transactional
public class UserHibernateDaoTest {

    private static final long USERID = 1;
    private static final long NONEXISTENTUSERID = -1;
    private static final String FIRSTNAME = "TestFirstName";
    private static final String LASTNAME = "TestLastName";
    private static final String EMAIL = "test1@mail.com";
    private static final String PASSWORD = "TestPassword";
    private static final String PHONENUMBER = "0000000";
    private static final String ROLE = "USER";

    @PersistenceContext
    private EntityManager em;

    private UserHibernateDao userHibernateDao;  
    private JdbcTemplate jdbcTemplate;


    @Before
    @Transactional
    public void setUp() {
            this.userHibernateDao = new UserHibernateDao();
            User u;
            u = new User();
            u.setUserid(123);
            u.setFirstName(FIRSTNAME);
            u.setLastName(LASTNAME);
            u.setEmail(EMAIL);
            u.setPassword(PASSWORD);
            u.setPhoneNumber(PHONENUMBER);
            u.setRole(ROLE);
            em.persist(u);

    }

    @Rollback
    @Test
    public void testCreate() {
            // Trying to run this empty test
    }
}

我运行它时得到以下信息:

INFO: Began transaction (1) for test context [DefaultTestContext@16fb356 testClass = UserHibernateDaoTest, testInstance = ar.edu.itba.paw.persistence.UserHibernateDaoTest@6bc248ed, testMethod = testCreate@UserHibernateDaoTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@224b4d61 testClass = UserHibernateDaoTest, locations = '{}', classes = '{class ar.edu.itba.paw.persistence.TestConfig}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@23a9ba52]; rollback [true]
Jan 15, 2020 1:17:10 PM org.springframework.test.context.transaction.TransactionContext endTransaction
INFO: Rolled back transaction for test context [DefaultTestContext@16fb356 testClass = UserHibernateDaoTest, testInstance = ar.edu.itba.paw.persistence.UserHibernateDaoTest@6bc248ed, testMethod = testCreate@UserHibernateDaoTest, testException = java.lang.IllegalArgumentException: Unknown entity: ar.edu.itba.paw.models.User, mergedContextConfiguration = [MergedContextConfiguration@224b4d61 testClass = UserHibernateDaoTest, locations = '{}', classes = '{class ar.edu.itba.paw.persistence.TestConfig}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]].

如果将 Rollback() 更改为 Rollback(false) 我得到:

 RollbackException: Transaction marked as rollbackOnly

任何想法如何解决这个问题?

如果你觉得有必要,我在 this question. 中发布了我的 TestConfig

【问题讨论】:

    标签: java hibernate unit-testing spring-mvc junit


    【解决方案1】:

    Spring 没有将您的 User 类视为实体。所以它不知道 User 是一个实体。需要在TestConfig类中添加实体包到组件扫描中。

    @ComponentScan({"src.main.java.ar.edu.itba.paw.persistence", "ar.edu.itba.paw.models" })
    

    【讨论】:

    • 我已经能够在我的服务部分中测试导入用户模型并且它可以工作(而不是将其添加到 componentScan),所以我在这里尝试做同样的事情。无论如何,我尝试了您的解决方案,但仍然遇到同样的异常。
    • 在你的配置中你设置factoryBean.setPackagesToScan("src.main.java.ar.edu.itba.paw.models");它应该从ar.edu.itba开始
    • 不幸的是,没有,尽管我设法让我的测试通过了评论几行。我仍然得到 testException。
    • @ComponentScan 用于豆类。 @EntityScan 用于实体。
    • @Stackoverflowed 你能在 github 上发布一些代码吗?它应该可以工作。 @neildo 我有我的应用程序在不使用@EntityScan 的情况下运行,可能是我使用不同的版本
    【解决方案2】:

    使用 @EntityScan("ar.edu.itba.paw.models") 注释您的 TestConfig 类。还要确保你的实体类用@Entity注释

    【讨论】:

    • 我正在使用 SpringMVC,我不确定这是不是解决方案?
    • 您正在使用 JPA 的 EntityManager。这应该有效。试一试。
    猜你喜欢
    • 2013-07-04
    • 1970-01-01
    • 2016-11-04
    • 2014-04-03
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多