0

XML メッセージを受信すると、それを Message オブジェクトにダイジェストし、メッセージ ID + CorrelationID の両方をタイムスタンプとともに配置し、それを Client オブジェクトに転送する "Adapter" オブジェクトをテストしたいと考えています。=20 メッセージは、前のもの (例: m2.correlationID =3D m1.ID)。

Client をモックし、Adapter が "client.forwardMessage(m)" を 2 回正常に呼び出して、最初のメッセージに null の correlationID を指定し、2 番目のメッセージに null 以外のcorrelationID を指定したことを確認します。

ただし、ID (m1.ID など) を取得して、correlationID が正しく設定されていることを正確にテストしたいと思います。

しかし、とにかくそうする方法が見つかりませんでした。

機能の追加に関するジラがありますが、誰もコメントしておらず、割り当てられていません。

これは本当に未実装ですか?

スタブできる IdGenerator オブジェクトを使用するようにアダプターを再設計するという代替案について読みましたが、オブジェクトが多すぎると思います。

ありがとう、そしてどんなコメントにも感謝します:-)

タイエブ

4

2 に答える 2

1

マッチャー ( http://code.google.com/p/hamcrest ) を使用して、メソッドに正しい引数が渡されているかどうかを確認できます。マッチャーを静的にインポートする必要があることに注意してください (私の例では HasCorrelationId )。

以下の例では、client.forwardMessage(m) が null correlationId を持つメッセージで 1 回呼び出され、correlationId="abc" を持つメッセージで 1 回呼び出されることを表明しています。

import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;

public class HasCorrelationId extends TypeSafeMatcher<Message> {
    private final Object expectedCorrelationId;
    public HasCorrelationId(Object expectedCorrelationId) {
        this.expectedCorrelationId = expectedCorrelationId;
    }
    @Override
    public boolean matchesSafely(Message message) {
        if (expectedCorrelationId==message.getCorrelationId()) return true;
        return expectedCorrelationId==null? false: expectedCorrelationId.equals(message.getCorrelationId());

    }

    public void describeTo(Description description) {
        description.appendText("hasCorrelationId("+expectedCorrelationId+")");

    }

    public static HasCorrelationId hasCorrelationId(Object correlationId) {    
    return new HasCorrelationId(correlationId);
    }
}

...そして今、テストのために:

public class MyTest {
    private Mockery context = new Mockery();

  @Test
  public void testCorrelationId() {
    final Client client = context.mock(Client.class);
    final Message message1 = context.mock(Message.class,"message1");
    final Message message2 = context.mock(Message.class,"message2");

    context.checking(new Expectations(){{
        allowing(message1).getCorrelationId();will(returnValue(null));
        allowing(message2).getCorrelationId();will(returnValue("abc"));

        one(client).forwardMessage(with(hasCorrelationId(null)));
        one(client).forwardMessage(with(hasCorrelationId("abc")));
    }});

    client.forwardMessage(message1);
    client.forwardMessage(message2);
    }

}
于 2009-05-10T07:20:18.453 に答える
0

Hamcrest 1.2 でのマッチャーの記述を簡素化するために、いくつかの努力をしました。必要な作業が少ない新しい FeatureMatcher があります。

于 2009-05-21T12:32:53.240 に答える