は、私はこのようなモックセットアップを持って言う:JMockモックオブジェクトがどのクラスを嘲笑しているかをどのようにして判断できますか?
JUnit4Mockery context = new JUnit4Mockery();
MyInterface mock = context.mock(MyInterface.class);
以降、私はそれをからかっ何クラスを見つけるために私のモックオブジェクトを調べたい:
Class mockedClass = mock.??? //would return MyInterface.class
私は何も表示されませんでしたmock
メソッドのシグネチャが(私は1.2.0を見た)以前のバージョンyの
<T> T mock (Class<T> typeToMock)
ある - これを行う方法についてJMock(2.5.1)のJavadocに明らかOUは、直接Mock
オブジェクトを作成し、及びその方法の一つは、私は何を達成しようとしていることは、私のユニットテスト内のDIを使用するためのユニットテストフレームワークです
Class getMockedType()
ました。 (私はGuice 3.0を使用しています)テストでDIを使用することは、私が使用しているアプリケーションサーバー/プラットフォームの制限です。テスト対象のオブジェクトは、自分自身のInjector
を持つマルチタスクのサブクラスです。移入しようとしています。
私はすべてのテストにAbstractModuleの匿名のインスタンスを作成する必要がないことを好むだろう、私は(それが1.2で働いていたように、これはそうです)このような何かを構築しようとしている:
public class MockModule extends AbstractModule {
private Iterable<Mock> mocks;
public MockModule(Iterable<Mock> mocks) {
this.mocks = mocks;
}
protected void configure() {
for (Mock mock : mocks) {
bind(mock.getMockedType()).toInstance(mock);
}
}
}
唯一欠けているのは、この質問に答えがある場合です。 ACCEPTEDのANSWERここ
TO
応答は、私は、このユースケースのために作成することになったものです:
import java.lang.reflect.Proxy;
import com.google.common.collect.Lists;
import com.google.inject.AbstractModule;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class MockModule extends AbstractModule {
private final Iterable mocks;
public MockModule(Object mock) {
mocks = Lists.newArrayList(mock);
}
public MockModule(Iterable mocks) {
this.mocks = mocks;
}
protected void configure() {
for (Object mock : mocks) {
Class superclass = mock.getClass().getSuperclass();
if (superclass != Object.class && superclass != Proxy.class) {
bind(superclass).toInstance(mock);
continue;
}
Class[] interfaces = mock.getClass().getInterfaces();
if (interfaces.length > 0) {
bind(interfaces[0]).toInstance(mock);
}
}
}
}
ありがとうございました!誰かがもっと頑強なバージョンを提案できるかどうかを待つつもりですが、これは間違いなく私に正しい方向を指摘してくれます。 – arootbeer
もう1つのアプローチは、モックオブジェクトに余分なインターフェースを追加してクラスを照会するカスタムImposteriserを作成することです。 –
私はその考えが本当に好きです...私はそれを調べます。 – arootbeer