我有一个具有多个依赖关系的控制器,通过在控制器类中使用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。
好了,在尝试了不同的模拟工具之后,我放弃了模拟部分,回到了spring的profiles Function。
我在application-context.xml中创建了一个名为mockXYZ的新配置文件
创建了我想要模拟的服务,或者给出一定的响应
@Service("type1")
@Profile("mockXYZ")
public class Type1Mock implements Type1{
....
}
在测试时,我将mockXYZ作为我的活动配置文件,并使用autowired我的控制器。
像这样,我只能模拟一个依赖,而其他依赖正常工作,因为它们只有一个实现,可以为任何配置文件选择。
希望这对其他人也有帮助。
谢谢