我有一个具有多个依赖关系的控制器,可以通过在控制器类中使用spring配置和Autowired来解决。
例如:
@Controller
public class MyController{
@Autowired
private Type1 myDependency1;
@Autowired
private Type2 myDependency2;
}
我想测试这个控制器,以便“mydependency1”被模拟,其他一切都是自动装配的。
我该怎么做?
我以前是按照以下测试进行的:
@Mock
private Type1 myDependency1;
@InjectMocks
private Mycontroller controller = new MyController();
private MockMvc mockMvc;
@Before
public void setUp(){
mockMvc = standaloneSetup(controller).build();
}
但这只是通过模拟myDependency1而不是注入myDependency2来返回控制器。
答案 0 :(得分:1)
好了,在玩了不同的模拟工具之后,我放弃了模拟部分并回到了春天的配置文件。
我在application-context.xml
中创建了一个名为mockXYZ的新配置文件创建了我想要模拟的服务,或者作为
给出了一定的响应@Service("type1")
@Profile("mockXYZ")
public class Type1Mock implements Type1{
....
}
在测试时,我将mockXYZ作为我的活动配置文件,并使用自动装配我的控制器。
像这样,我只能模拟一个依赖项,而其他依赖项正常工作,因为它们只有一个实现,并且会为任何配置文件选择。
希望这也有助于其他人。
谢谢