0

Struts アプリケーションのビジネス ロジック層の一部である関数をテストしようとしています。コードが組織全体で使用される jar の外部関数に依存しているため、問題に直面しています。

public CustomObject getCustomObject(String id){
        CustomObject customObject = new CustomObject();
        QueryObject sql = createSqlStatement(id); // EXTERNAL jar
        Result result = execute(sql); // EXTERNAL jar
        ArrayList list = result.getResulList(); // EXTERNAL jar

        // Logic to use the list object to fill the customObject
        // I can see an error here, that could have been 
        // caught in unit test

            return customObject ;
        }

問題は、オブジェクトを埋めるロジックをテストすることです。
私が書いた Junit4 テストは次のとおりです。

    @Test
    public void testCustomObject()  {
        CustomObject customObjectwActual = new CustomObject();
        CustomObject customObjectExpected = new CustomObject();

           // set properties of customObjectExpected here

        customObjectwActual = getCustomObject(id); // Exception here

        assertEquals(customObjectExpected , customObjectwActual );
    }

開発者の説明によると、「strutsアプリケーションの起動時に外部jarクラスがロードされる」ため、例外がスローされます。私はJavaとストラットが初めてです。私のアプローチは間違っていますか?これらの外部jarクラスを何らかの方法で「ロード」する方法はありsetUpBeforeClass()ますか?
ご不明な点がございましたらお知らせください。

編集 2: 申し訳ありませんが、私の質問は不明です。クラスパスにこれらの外部 jar があります。正常にコンパイルされ、実際に外部 jar のクラスがロードされます。SQL クエリは xml ファイルに保存されます。これらの外部 jar には、SQL ステートメントを含む独自の xml ファイルもあります。これら 2 つの xml ファイルのいずれかをロードできません。
さらに、それらが正しくロードされたとしても、実際にはデータベースを呼び出したくありません。これらの呼び出しをモックする方法はありますか?

4

1 に答える 1

1

これらの外部jarクラスをsetUpBeforeClass()で何らかの方法で「ロード」する方法はありますか?

これらの jar をクラスパスに含めるだけです。クラスは、使用時に実行時に自動的にロードされます

私はJavaとストラットが初めてです。私のアプローチは間違っていますか?

Struts に固有のものは何もありません。プロジェクトで使用している外部クラスのプレーンコア Java をクラスパスに含める必要があります

これらの呼び出しをモックする方法はありますか?

これらの呼び出しをモックする場合、DB 相互作用をテストする DB テストケースを作成する用途は何ですか

また、Eclipse のような IDE を使用することをお勧めします。これは、コンパイルの問題を前もって提供したり、書式設定したりするなど、開発に非常に役立つからです。

于 2013-05-05T04:27:05.407 に答える