gpt4 book ai didi

java - 使用 Pact JUnit 规则还是直接使用 Pact DSL?

转载 作者:行者123 更新时间:2023-11-30 06:42:59 27 4
gpt4 key购买 nike

我想了解为什么会发生以下情况?问题:如果我使用 Pact Junit 规则,Junit 测试会失败并出现 HttpConnect 异常。但是,如果我直接使用 Pact DSL,则会生成相同的测试通过并生成 pact 文件。有人可以告诉我为什么以及如何使用 Pact Junit 规则吗?

使用 Pact Junit 规则的代码:(失败并出现 HttpHostConnectException)

@Rule
public PactProviderRule rule = new PactProviderRule("DrivePOC", PactSpecVersion.V2, this);

/*Setting up what your expectations are*/
@Pact(provider = "P1",consumer = "C1")
public PactFragment createFragment(PactDslWithProvider builder)
{

PactFragment pactFragment = ConsumerPactBuilder
.consumer("C1")
.hasPactWith("P1")
.uponReceiving("load Files Data")
.path("/loadData")
.method("POST")
.body("{\"givefileId\": \"abc\"}")
.willRespondWith()
.status(200)
.body("{\"fileId\": \"abcfileId1234\"}")
.toFragment();
return pactFragment;

}

/*Test similar to Junit, verifies if the test are ok and the responses are as per expectations set in the createFragment*/
@Test
@PactVerification(value = "P1")
public void runTest() throws IOException
{
MockProviderConfig config = MockProviderConfig.createDefault();
Map expectedResponse = new HashMap();
expectedResponse.put("fileId", "abcfileId1234");
try {
Assert.assertEquals(new ProviderClient(config.url()).helloToDrive("{\"givefileId\": \"abc\"}"),
expectedResponse);
} catch (IOException e) {
throw new RuntimeException(e);
}

}

直接使用Pact DSL进行代码(此Junit通过并成功生成Pact文件)

@Test
public void testPact() {
PactFragment pactFragment = ConsumerPactBuilder
.consumer("C1")
.hasPactWith("P1")
.uponReceiving("load Files Data")
.path("/loadData")
.method("POST")
.body("{\"givefileId\": \"abc\"}")
.willRespondWith()
.status(200)
.body("{\"fileId\": \"abcfileId1234\"}")
.toFragment();

MockProviderConfig config = MockProviderConfig.createDefault();
VerificationResult result = pactFragment.runConsumer(config, new TestRun() {
public void run(MockProviderConfig config) throws Throwable {
Map expectedResponse = new HashMap();
expectedResponse.put("fileId", "abcfileId1234");
try {
Assert.assertEquals(new ProviderClient(config.url()).helloToHueDrive("{\"givefileId\": \"abc\"}"),
expectedResponse);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
});

if (result instanceof PactError) {
throw new RuntimeException(((PactError)result).error());
}

Assert.assertEquals(ConsumerPactTest.PACT_VERIFIED, result);
}

最佳答案

将 Junit 版本从 4.8 更改为 4.9 后,我可以使注释正常工作。

关于java - 使用 Pact JUnit 规则还是直接使用 Pact DSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44108752/

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