我可以只模拟控制器的一个依赖项

时间:2013-06-11 15:48:30

标签: spring mockito

我有一个具有多个依赖关系的控制器,可以通过在控制器类中使用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来返回控制器。

1 个答案:

答案 0 :(得分:1)

好了,在玩了不同的模拟工具之后,我放弃了模拟部分并回到了春天的配置文件。

我在application-context.xml

中创建了一个名为mockXYZ的新配置文件

创建了我想要模拟的服务,或者作为

给出了一定的响应
@Service("type1")
@Profile("mockXYZ")
public class Type1Mock implements Type1{
    ....
}

在测试时,我将mockXYZ作为我的活动配置文件,并使用自动装配我的控制器。

像这样,我只能模拟一个依赖项,而其他依赖项正常工作,因为它们只有一个实现,并且会为任何配置文件选择。

希望这也有助于其他人。

谢谢