具有java类继承的Cucumber DataTableType

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

我在黄瓜测试中遇到错误,我为我的类创建了一个@DataTableType,因为它在将数据列表传递到黄瓜表时给我一个错误

假设我有两个 Java 类,其中一个演示示例如下所示

@Getter
@Setter
@NoArgsContructor(force = true)
@AllArgsContstructor
@RequiredArgsConstructor()
MyJavaClass extends MyDTOClass implements Serializable {

private static final long someID = 1132323355L;

private final String myString;

private String listOfNumbers;
private String myFileNames;

}

MyDTOClass 类看起来像这样

public class MyDTOClass {

private java.lang.String myBandName = null;
private String managerName = null;
// and a bunch more strings of a mix match of how they are shown here
// as well as getters and setters for each of these

}

现在我为 MyJavaClass 创建了一个 @DataTableType ,看起来像

@DataTableType
public MyJavaClass myJavaClassEntry(Map<String, String> entry {
     return new MyJavaClass(
              entry.get("myString"),
              entry.get("listOfNumbers"),
              entry.get("myFileNames"));
}

当我安装 Maven 时,它会进行编译,但是当我运行测试时,我在日志中收到一个错误。 “java.lang.RuntimeException:您忘记提供所有字段的替换!”

我觉得这与 MyJavaClass 从 MyDTOClass 继承的字段有关,但我在黄瓜文档中找不到任何信息以了解此处的正确步骤

我正在使用带有 java 17 和 Spring 5.3.9 的黄瓜版本 7,任何对这里正确过程的了解都将不胜感激

java spring cucumber bdd cucumber-java
1个回答
0
投票

错误消息“java.lang.RuntimeException:您忽略了为所有字段提供替换!”通常表明 Cucumber 预期的区域与信息表中给出的区域之间存在混乱。

在您的情况下,您的 MyJavaClass 似乎具有从 MyDTOClass 获取的区域,并且 Cucumber 在将信息表映射到您的类时可能无法正确处理遗留结构。

要解决此问题,您应该确保信息表提供所有字段的值,包括从 MyDTOClass 获取的值。如果课程中任何字段是必填字段,则也必须在信息表中给出。

您可以采取以下许多步骤来排除故障并可能解决问题:

保证信息表的完整性:确保您的信息表包含 MyJavaClass 及其超类 MyDTOClass 所需的所有区域。这意味着为所有区域提供值,计算从 MyDTOClass 获取的值。

合法地处理获取的区域:确保 @DataTableType 解释中的 myJavaClassEntry 策略正确处理从 MyDTOClass 获取的区域。如果 MyDTOClass 中有需要的区域,您应该在信息表中明确地为它们赋值,或者在 myJavaClassEntry 策略中以类似的方式处理它们。

检查 Cucumber 信息表映射:仔细检查 Cucumber 如何将信息表映射到您的课程。毫无疑问,信息表中的列名称与课程中的字段名称相协调,计算已获得的区域。

调查:您将包括日志记录或调试 myJavaClassEntry 策略,以查看哪些区域正在准确填充以及哪些区域可能丢失或导致问题。

考虑使用独特的方法:如果遗留结构也导致了很大的复杂性,或者如果您无法利用 Cucumber 的信息表映射解决问题,您可以考虑重构代码以理清遗留结构或处理信息以意想不到的方式映射..

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