私はこれまで数十の Java プロジェクトに Cucumber を使用してきましたが、これまでこの問題に遭遇したことはありませんでした。
ステップ定義でリストにマップしたい単純なテーブルがあります。
And deal repository contains
| dealPid | closingDate | expenseCode |
| 1 | 01/06/2015 | test |
標準のキャメル ケース規則に従って、必須フィールドのみを使用して独自の POJO を作成することから始めました (わかりやすくするために、ゲッター/セッターは省略されています)。
public class Deal {
private String dealPid ;
private Date closingDate ;
private String expenseCode;
}
私のステップ定義:
@Given("^deal repository contains$")
public void deal_repository_contains(
@Format("dd/MM/yyyy") List<DEAL> deals) throws Throwable {
...
}
フィールドは適切にマッピングされ、1 つのディール アイテムを含むリストを取得しています。デバッグに入ると、cucumber.runtime.xstream.LocalizedXStreams まで
Converter converter = converterLookup.lookupConverterForType(clazz);
xStream ReflectionConvertedが Datatable 解析用に選択されていることがわかります。
これはレガシー プロジェクトであり、他の開発者は、このためのクラスが既に存在することを教えてくれました。だから今、私はそのクラスに切り替えたいと思っています.
だから今、私はステップ定義で別のパッケージからこのレガシー DEAL クラスを使用しているので、リストが表示されることを期待していますが、そうではありません。リストを取得しますが、最初の行も解析されます。デバッグでは、選択されたコンバーターが以前の ReflectionConverter ではなくDynamicClassWithStringAssignableConverterであることがわかりました。これが、最終的に解析された結果が異なる理由です。
残念ながら、Xstream が cucumber-jvm-deps に再パッケージ化され、Eclipse が失われる (または、その場合にソースを正しく添付する方法がわからない) ため、デバッグをさらに進めて、この実装が選択される理由を理解することができません。
必要なフィールドを適切な名前 (最初の Deal クラスと同じ) で DEAL クラスに一時的に追加しようとしましたが、うまくいきません。当初、DEAL クラスは Serializable を実装していました。削除しましたが、それでも同じ動作です。
クラス名が完全に大文字であるため、実際には、別の Xstream コンバーターが選択されているように見えます...
それは本当に問題の根本的な原因でしょうか?
ありがとう