当前位置: 首页 > 知识库问答 >
问题:

Quarkus华丽在测试期间未保存的完整性

严恩
2023-03-14

我正在使用RestEasy进行Quarkus和Quarkus测试,并且在每次测试之前设置虚拟数据时遇到了问题。

我正在尝试在调用endpoint之前使用活动记录模式插入用户。在呼叫用户之后。persistAndFlush()(或者简单地调用.persist()),当向User实体请求用户计数时,它会正确地返回数据库中有一条记录。但是,当通过RestEasy调用endpoint时,它会向我提示,没有找到具有给定标识符的用户,实际上,当注销服务中某个方法调用中的用户数时,根据Quarkus,有0个用户。在我看来,带有@Test注释的方法和服务本身在不同的上下文中运行?这有点奇怪,我肯定遗漏了一些明显的东西。

下面是我的测试类的样子:

@QuarkusTest
@QuarkusTestResource(PostgreSQLDatabaseResource.class)
public class AuthenticationResourceTest {

  @TestHTTPEndpoint(AuthenticationResource.class)
  @TestHTTPResource
  URL url;

  @BeforeEach
  @Transactional
  public void setUp() {
    User.deleteAll();
  }


  @Test
  public void testWithNonExistingEmail() {
    AuthenticationChallenge invalidAuthRequest = AuthenticationChallenge.builder()
        .email("admin@admin.com")
        .password("something")
        .build();

    given()
        .when()
        .contentType(ContentType.JSON)
        .body(invalidAuthRequest)
        .post(url)
        .then()
        .statusCode(401);
  }

  @Test
  @Transactional
  public void testWithValidAuthenticationChallenge() {
    User user = User.builder()
        .name("admin")
        .role(Roles.ADMIN)
        .status(Status.ACTIVE)
        .password(BCrypt.withDefaults().hashToString(10, "admin".toCharArray()))
        .email("admin@admin.com")
        .build();

    user.persistAndFlush();

    given()
        .when()
        .contentType(ContentType.JSON)
        .body(AuthenticationChallenge.builder().email("admin@admin.com").password("admin").build())
        .post(url)
        .then()
        .statusCode(200)
        .log()
        .all();
  }
}

共有1个答案

强硕
2023-03-14

在测试方法结束之前,您的用户不会保存到数据库中,因为它是事务性的,并且事务在结束时提交。

在REST调用中,您在事务之外查询数据库,这样就不会有数据。

如果要初始化REST调用可见的数据,需要在@BeforeEach方法中创建数据。

 类似资料:
  • 我喜欢在Quarkus中使用JAX-RS的想法,因为它将使代码不依赖于框架实现。然而,当涉及到DB时,我们建议使用“panache”,并从扩展DB实体。我想它对AOT工作(Quarkus想做的基本上是这样的)非常方便和好,并且大大简化了Quarkus的工作,但是它引入了对特定实现的严重依赖,因此我们不能使用纯JPA模块。 这与“干净的体系结构”相冲突,并使此类DB模块的测试变得复杂(如果可能的话)

  • 我正在尝试夸克入门项目。使用maven执行包含的单元测试。然后我尝试了提议的gradle构建文件,因为我们使用gradle而不是maven。当我运行时,单元测试肯定没有执行(我知道,因为我修改它失败了)。 这是一个错误还是我有什么问题?

  • 问题内容: 有什么方法可以使用WebDriver保存完整的网页吗? 当前,我执行getPageSource(),然后将所有内容放入html本地文件中,但是保存的页面的形状不好(奇怪的字符,没有图像,所有元素向下偏移) 请参阅以下我使用的代码: 有人可以建议我使用WebDriver在Firefox中保存完整网页的方法吗?例如自动? 问题答案: 奇怪的字符可能与写入文件的编码有关。 其他问题可能与以下

  • 父级pom.xml中的jacoco配置: 父级pom.xml中的绝对配置:

  • 综述 许多应用程序被设计为通过部分隐藏输入表单来确定用户当前状态而展示不同的页面。但是,在许多情况下,有可能通过代理提交此类隐藏表单的值。在这些案例中,服务器端控制措施必须足够健壮来确保正确的业务逻辑数据。 此外,应用程序必须不依赖于不可编辑元素,下拉框列表或者业务逻辑处理过程的隐藏表单域,因为这些只是在浏览器的环境中不可编辑。用户可以使用代理工具来编辑这些参数并尝试操纵业务逻辑。如果应用程序对外

  • 我的问题正好相反,这里的大多数问题是测试数据没有被插入,我的问题在测试中持续存在,但在通过控制器调用时不会。 我在这方面还是新手,所以可能犯了一些愚蠢的错误。感谢任何帮助! 这是我的设计。 项目1:业务逻辑层:实体、服务、Repo (Spring数据)、Oracle = 项目2:Spring MVC 4.3.3,Thymeleaf 3,import bll.jar,控制器调用BLL服务进行保存。日