ctx = org.springframework.context.ApplicationContext
clazz = Class<T>
が、私はモックする必要が
Map<String, T> beansMap = ctx.getBeansOfType(clazz);
ctx.getBeansOfType(clazz)
この返信はMap<Spring, T>
できません。
ctx = org.springframework.context.ApplicationContext
clazz = Class<T>
が、私はモックする必要が
Map<String, T> beansMap = ctx.getBeansOfType(clazz);
ctx.getBeansOfType(clazz)
この返信はMap<Spring, T>
できません。
通常、カップリングを導入するので、ApplicationContext
から豆を直接取得することは悪い習慣と考えられています。 この理由を参照してくださいhttps://stackoverflow.com/a/9663099/6604329。
フィールド、コンストラクタ、またはルックアップメソッドの注入を使用すると、ApplicationContext
のモックが不要になります。
任意の方法は、ここであなたはどのようにあなたは、CTXをinstatiatingているApplicationContext.getBeansOfType(clazz)
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.context.ApplicationContext;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertFalse;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* @author mponomarev
*/
public class ApiTest {
@Test
public void testSomething() throws Exception {
ApplicationContext applicationContext = mock(ApplicationContext.class);
final Map beans = new HashMap();
when(applicationContext.getBeansOfType(any(Class.class)))
.thenAnswer(new Answer<Map<String,Object>>() {
@Override
public Map<String,Object> answer(InvocationOnMock invocation)
throws Throwable {
Class clazz = invocation.getArgumentAt(0, Class.class);
beans.put("beanName", mock(clazz));
return beans;
}
});
Api api = new Api(applicationContext);
api.perform();
assertFalse("beans shouldn't be empty", beans.isEmpty());
for(Object o : beans.values()) {
Component component = (Component)o;
Mockito.verify(component).doSomething();
}
}
public static class Api {
private final Map<String,Component> components;
Api(ApplicationContext applicationContext) {
this.components = applicationContext.getBeansOfType(Component.class);
}
void perform() {
for(Component component : components.values()) {
component.doSomething();
}
}
}
public interface Component {
void doSomething();
}
}
初心者のための素敵な答え! – GhostCat
モックことができる方法ですか?テストしようとしているクラスの詳細を表示できますか? – Plog