私のSpringアプリケーションをテストしたい。認証が必要なので、ユーザオブジェクトを作成して@Before
メソッドに保持します。しかし、私は、init()
メソッドが別のセッションで実行されると思うので、私は認証を行うことができません。SpringブートとEntityManagerによるセキュリティ統合テスト
IntegrationTest
クラス:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT)
@Transactional
public class IntegrationTest {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private PasswordEncoder passwordEncoder;
@LocalServerPort
int port;
private String URL;
@Before
public void init() {
User user = new User();
user.setUsername("testUser");
user.setPassword(passwordEncoder.encode("test"));
user.setEmail("[email protected]");
user.setEnabled(true);
entityManager.persist(user);
entityManager.flush();
entityManager.clear();
RestAssured.port = port;
URL = "http://localhost:" + String.valueOf(port) + "https://stackoverflow.com/users/user";
}
@Test
public void givenNotAuthenticatedUser_whenLoggingIn_thenCorrect() {
final RequestSpecification request = RestAssured.given().auth().basic("testUser", "test");
request.when().get(URL).then().assertThat().statusCode(200);
}
}
しかし、私は私のuserRepository
を使用し、すべてが正常に動作します
entityManager.persist(user);
entityManager.flush();
entityManager.clear();
代わりの
userRepository.save(user);
を呼び出す場合。注釈を@Transactional
も削除する必要があります。
最初に私はそれがコミットがなかったからだと思った - ユーザーテーブルに変更がないことがわかった。 EntityManager
にデータをコミットする方法
EntityManager
のテストの使い方は?そして、なぜUserRepository
がうまく機能するのですか? documentationで述べたように
なぜdownvoteですか?私の質問には3つの部分があり、これは「EntityManagerにデータをコミットさせる方法」の答えです。 –