2
ユニットテストが機能しない理由を調べようとしています。私は、Hibernateがアップデートの前に挿入を行うのを見ました。 それはなぜですか? テストが失敗する理由は何ですか?ユニットテストでDataJpaTestが更新されない
私はテスト環境用にhsqldbを設定しましたが、サービスはmysqlで正常に動作しているようです。
@Repository
public interface UserDataRepository extends CrudRepository<UserData, Integer> {
@Transactional
@Modifying
@Query("UPDATE UserData ud SET chips = chips + :delta WHERE ud.id = :userId")
void addChipsToUser(@Param("userId") int userId, @Param("delta") long delta);
}
私のテストクラス:
@RunWith(SpringRunner.class)
@DataJpaTest
public class TestJPASlice {
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserDataRepository repository;
@Test
public void testAddChipsToUser() {
UserData data = new UserData();
data.setChips(100);
data.setId(13);
this.entityManager.persist(data);
System.err.println("pre u");
this.repository.addChipsToUser(13, 500);
System.err.println("post u");
UserData two = this.repository.findOne(13);
assertThat(two.getId()).isEqualTo(13);
assertThat(two.getChips()).isEqualTo(600);
}
これは、私が手に出力されます:
Hibernate: update user_player_data set chips=chips+? where user_id=?
2017-08-10 11:33:37.794 WARN 2128 --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Warning Code: -1100, SQLState: 02000
2017-08-10 11:33:37.795 WARN 2128 --- [main] o.h.engine.jdbc.spi.SqlExceptionHelper : no hay datos
2017-08-10 11:33:37.796 INFO 2128 --- [main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test context [[email protected]
2017-08-10 11:33:37.801 INFO 2128 --- [main] o.s.t.c.transaction.TransactionContext : Began transaction (1) for test context [[email protected]
pre u
Hibernate: insert into user_player_data (chips, user_id) values (?, ?)
Hibernate: update user_player_data set chips=chips+? where user_id=?
post u
2017-08-10 11:33:37.874 INFO 2128 --- [main] o.s.t.c.transaction.TransactionContext : Rolled back transaction for test context [[email protected]
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.073 sec <<< FAILURE! - in service.chipBank.TestJPASlice
testAddChipsToUser(service.chipBank.TestJPASlice) Time elapsed: 0.074 sec <<< FAILURE!
org.junit.ComparisonFailure: expected:<[6]00L> but was:<[1]00L>
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at service.chipBank.TestJPASlice.testAddChipsToUser(TestJPASlice.java:43)
ありがとうございました!それはトリックでした –
@dimitrisli多分あなたは他のオプションがあることを知っていますか? ClearAutomaticallyを追加すると私には合わないからです。 –
@OrestKyrylchuk明らかにあなたの事件を推測するのは難しいです。あなたのユースケースをスタンドアロンの質問に定式化してください。 – dimitrisli