首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Junit for @Transactional

Junit for @Transactional
EN

Stack Overflow用户
提问于 2020-07-13 16:36:15
回答 1查看 464关注 0票数 0

我需要编写一个测试,它显示我的事务正在触发。

ClientDAOImpl.java -使用一种转换方法的文件。

代码语言:javascript
复制
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class ClientDAOImpl implements ClientDAO {

    private final Connection  conn;
    private PreparedStatement st;
    private ResultSet         rs;

    public ClientDAOImpl() throws SQLException, ClassNotFoundException {
        this.conn = new PostgresConnection().createConnection();
    }

    @Override
    public User get(final long id) throws SQLException {

        User client = null;
        this.st = this.conn.prepareStatement("SELECT * FROM CUSTOMERS WHERE sid = ?;");
        this.st.setLong(1, id);
        this.rs = this.st.executeQuery();
        while (this.rs.next()) {
            this.rs.getLong("sid");

            //some code

            client = new User(FIRST_NAME, LAST_NAME, PHONE_NUMBER, EMAIL, CARD_NUMBER,
                    DELIVERY_ADDRESS, COMMENT);
        }
        DAO.closing(this.rs, this.st, this.conn);
        if (client == null) {
            System.out.println("Something wrong with getting client by id - " + id);
        } else {
            System.out.println("Client with the id = " + id + " successfully retrieved");
        }
        return client;

    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS, readOnly = false)
    public int insert(final User user) throws SQLException, ClassNotFoundException {
        this.st = this.conn.prepareStatement(
                "INSERT INTO CUSTOMERS(FIRST_NAME,LAST_NAME,PHONE_NUMBER,EMAIL,CARD_NUMBER,DELIVERY_ADDRESS,COMMENT)VALUES(?,?,?,?,?,?,?);");
        
        //some code

        final int res = this.st.executeUpdate();
        System.out.println("User " + user + " successfully inserted");
        return res;
    }

}

MyTest.java -用我的测试文件

代码语言:javascript
复制
@ContextConfiguration(classes = Store.class, locations = {"classpath*:beans.xml"})
@RunWith(SpringRunner.class)
@WebMvcTest(MainApp.class)
@Transactional
@Rollback(true)
@TestExecutionListeners({TransactionalTestExecutionListener.class})
public class StoreTest {

    private LocalValidatorFactoryBean localValidatorFactory;
    @MockBean
    HttpRequest                       request;
    HttpRequest                       response;

    @MockBean
    private User                      user;
    @Mock
    private Model                     model;
    @Autowired
    MockMvc                           mockMvc;

    @Mock
    Store                             store;

    @Autowired
    List<Products>                    products;

    @Before
    public void setup() {

        this.localValidatorFactory = new LocalValidatorFactoryBean();
        this.localValidatorFactory.setProviderClass(HibernateValidator.class);
        this.localValidatorFactory.afterPropertiesSet();

        MockitoAnnotations.initMocks(this);
        final Store store = new Store(this.products);

        this.mockMvc = MockMvcBuilders.standaloneSetup(store).build();

    }

    @Test
    public void testForTransaction() throws ClassNotFoundException, SQLException {
        final User user = new User();
        user.setFirstName("Ivan");
        user.setLastName("Ivanov");
        user.setPhoneNumber("18000000");
        user.setEmail("mail@gmail.com");
        user.setCardNumber("4111111111111111");
        user.setDeliveryAddress("address");
        user.setComment("comment");

        String result = "";

        try {
            final Connection connection = new PostgresConnection().createConnection();
            if (connection != null) {
                System.out.println("Success");
            }
            final ClientDAO clientDao = new ClientDAOImpl();
            clientDao.insert(user);

            result = clientDao.get(3L).getFirstName();
        } finally {
        }

        Assert.assertEquals("it should be equal", "Ivan", result);
    }

我的测试成功了,我得到了这个:

代码语言:javascript
复制
User my.app.entities.User@2e5ee2c9 successfully inserted
Client with the id = 3 successfully retrieved
Rolled back transaction for test context [DefaultTestContext@7103ab0 testClass = StoreTest,...// and etc

那么,我的问题是如何为我的示例编写一个正确的测试,并显示我的事务是否有效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-13 17:37:02

我不认为需要测试交易是否有效。Hibernate为您提供了批注@ transaction,该注释已经经过了很好的测试和验证,可以正确工作,这意味着,如果您将@Trans操作批注放置在所需的位置(类、接口或方法上),就可以确定您的事务是否工作,这就是您的情况。如果您想测试存储在真实DB中的数据,然后正确地获取数据,那么您应该参考集成或完整测试技术,也可以参考h2数据库,这些数据库主要用于这类测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62880296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档