gpt4 book ai didi

java - 如何使用 arquillian 测试依赖于持久性的 Rest-API

转载 作者:行者123 更新时间:2023-12-02 04:11:08 25 4
gpt4 key购买 nike

我想测试一个通过 JAX-RS 提供休息端点的类。该类依赖于 JPA EntityManager,因此依赖于需要在测试执行之前填充的数据库。我看到了像 dbunit 这样的数据库填充解决方案,但我想直接从我的测试类填充数据(或通过 object mother pattern 委托(delegate))。但是,在测试休息端点时,我需要使用注释选项 @Deployment(testable = false) ,它拒绝我将 EntityManager 注入(inject)到我的测试类中。

那么我该如何解决这种情况呢?

或者有更好的最佳实践吗? (也许是 mock ,但这对于黑盒测试也是不可能的)

最佳答案

您可以创建一个 bean 来生成测试数据:

@Startup
@Singleton
public class TestDataGenerator {

@PersistenceContext
private EntityManager em;

@PostConstruct
private void generateTestData() {
// Generate your test data
}
}

上面定义的TestDataGenerator类用@Singleton进行注释。 (确保该类只有一个实例)和 @Startup (用于在应用程序启动序列期间进行急切初始化)。

TestDataGenerator 类添加到您的 Arquillian 部署中:

@RunWith(Arquillian.class)
public class MyArquillianTest {

private Client client = ClientBuilder.newClient();

@Deployment
@RunAsClient
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class)
.addClasses(TestDataGenerator.class, ...)
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}

@Test
public void testAPI(@ArquillianResource URL deploymentUrl) {
// Test your REST service
WebTarget target = client.target(deploymentUrl.toURI()).path("api");
}
}

观察 @RunAsClient相当于 @Deployment(testable = false)

@ArquillianResource注释允许您注入(inject) URL测试您的网络应用程序。

关于java - 如何使用 arquillian 测试依赖于持久性的 Rest-API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com