S2JUnit4 で、EasyMock で作ったテストスタブをテスト対象にバインディングする

例えば、下のような、他のコンポーネントバインディングしている FooImpl と言うクラスをテストしようとした場合。

package example

import javax.annotation.Resource;
import javax.servlet.ServletContext;

public class FooImpl implements Foo {
    @Resource
    private ServletContext application;

    ……
}

上記の application をEasyMockで作って container に登録しようとした場合に、FooImpl をdicon定義+自動フィールドバインディングにしていると、 @EasyMock(register = true)より先に解決されてしまう。
TestContext#register を使ってテスト対象のクラスを登録することで回避できた

package example

import static org.easymock.EasyMock.expect;
import static org.junit.Assert.assertEquals;

import javax.servlet.ServletContext;

import org.junit.runner.RunWith;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.unit.Seasar2;
import org.seasar.framework.unit.TestContext;
import org.seasar.framework.unit.annotation.EasyMock;

@RunWith(Seasar2.class)
public class FooImplTest {
    private TestContext ctx;

    @EasyMock(register = true)
    private ServletContext application;

    public void before() {
        ctx.register(FooImpl.class);
    }

    public void recordTestFoo() {
        // expectする
    }

    public void testGetWebInfPath() {
        Foo foo = SingletonS2Container.getComponent(Foo.class);
        …
    }

}

他にもっとスマートなやり方があるんだろうと思いますが、Java久しぶりだしテストだからここまででいいや。