无法找到消息类型“json”的正确消息验证器,请为此消息类型定义一个有能力的消息验证器

问题描述 投票:0回答:1

我在使用 Citrus 进行集成测试时遇到了一个不寻常的问题。在多次运行同一测试期间,我始终遇到如下错误:

com.consol.citrus.exceptions.TestCaseFailedException: Could not find proper message validator for message type 'json', please define a capable message validator for this message type
    at com.consol.citrus.TestCase.executeAction(TestCase.java:227)
    at com.consol.citrus.TestCase.doExecute(TestCase.java:152)
    at com.consol.citrus.actions.AbstractTestAction.execute(AbstractTestAction.java:42)
    at com.consol.citrus.Citrus.run(Citrus.java:403)
    at com.consol.citrus.testng.AbstractTestNGCitrusTest.invokeTestMethod(AbstractTestNGCitrusTest.java:131)
    at com.consol.citrus.testng.AbstractTestNGCitrusTest.run(AbstractTestNGCitrusTest.java:108)
    at com.consol.citrus.testng.AbstractTestNGCitrusTest.run(AbstractTestNGCitrusTest.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:212)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:707)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:348)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:343)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:305)
    at org.testng.SuiteRunner.run(SuiteRunner.java:254)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:115)
    at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeMulti(TestNGDirectoryTestSuite.java:204)
    at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:107)
    at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:112)
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

这个问题似乎间歇性地发生,我不确定根本原因。还有其他人在 Citrus 集成测试中遇到过类似的问题吗?任何关于如何解决或减轻这种重复出现的错误的见解或建议将不胜感激。

提前致谢!

p.s:我使用 XML 格式的测试,JDK 1.8 和 Citrus 2.8.0。

citrus-framework
1个回答
0
投票

Citrus 消息验证是模块化的,具体取决于所使用的消息数据格式。例如,要启用 Json 消息验证,您需要将

citrus-validation-json
模块作为依赖项添加到项目中。

在您的情况下,Citrus 已收到 Json 消息并尝试验证它,但您的项目中似乎缺少 Json 验证模块。

当接收操作验证选项中没有给出明确的消息类型时,Citrus 会尝试根据消息负载自动猜测消息类型。

在您的情况下,接收操作将消息类型解析为 Json 消息。我建议您查看在这种情况下收到的消息内容,以了解为什么 Citrus 要使用 Json 消息验证器。

© www.soinside.com 2019 - 2024. All rights reserved.