2

いくつかの会社のコードに単体テストを追加しようとしています。はい、すでにあるはずですが、すべての人が私と同じように単体テストについて考えているわけではないようです。

しかし、私は少しストッパーにぶつかりました。確かに、私の Java、Spring、および単体テストの知識は、十分ではありません。私の問題はこれです:

クラスをテストする単体テストをコードに追加しました。このクラスには、scope="request" を持つ Bean が含まれており、Bean をインスタンス化しようとすると、例外がスローされます。

java.lang.IllegalStateException: No Scope registered for scope 'request'

これは、HttpServletRequest オブジェクトを持っていないためだと思いますが、これらのモックを作成する方法がわかりません。また、作成後にこのモック オブジェクトを単体テストに追加する方法もわかりません。それがこの問題を解決すること。

以下は関連するコードの縮小版で、この問題の一部であるすべての詳細が含まれていると思います。

どうすればこれを機能させることができますか?

@Test
public void handleRequest() {
    try {
        Message<?> outMessage = (Message<?>) response.handleRequest(map);
    } catch (Exception e) {
        assertNotNull(e);
    }
    outMessage.getPayload().toString());
}

public class upddResponse extends AbstractResponseTransform {

@SuppressWarnings("unchecked")
public Message<?> handleRequest(Map<String, Message<?>> messages) throws Exception {
    super.addEnvironmentDetails(serviceResponseDocument.getServiceResponse());
}

public abstract class AbstractResponseTransform implements ResponseTransform,
            ApplicationContextAware {

    private ApplicationContext applicationContext;
    private MCSResponseAggregator mcsResponseAggregator;

    public ServiceResponseType addEnvironmentDetails(ServiceResponseType serviceResponse) throws Exception {
        try {
            mcsResponseAggregator = (MCSResponseAggregator) applicationContext
                        .getBean("mcsResponseAggregator");
        }
        catch (Exception ex) {

        }
    }
}

public interface ResponseTransform extends Transform {
    public Message<?> handleRequest(Map<String, Message<?>> messages)
            throws Exception;
}

<bean id="mcsResponseAggregator" class="com.company.aggregator.MCSResponseAggregator" scope="request" />
4

3 に答える 3

0

Springコンテキスト内でモックを使用できます。

ただし、Springがscope = "request"を理解しないため、問題は解決しません。リクエストスコープの独自の実装を作成することもできますが、このような問題をすべて経験しないほうがよいと感じています。

簡単な方法は、小さなテストコンテキストでリクエストスコープのBeanをオーバーライドすることです。その場合、技術的には元のコンテキストをテストしていませんが、はるかに迅速に実行されます。

于 2010-06-21T14:56:48.407 に答える
0

WebApplicationContext次の方法で Bean を処理する必要があります。scope="request"

分離されたクラスをテストするときは、Spring 統合テストでスタブ オブジェクトを使用し、Spring なしで EasyMock を使用することをお勧めします。

于 2010-06-21T12:27:39.843 に答える
0

Spring 3.2 には、これに対するサポートが付属しています。「Spring MVC テスト フレームワーク」を参照してください。

于 2013-02-05T15:05:17.783 に答える