我只能模拟控制器的一个依赖项吗?



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

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

希望这对其他人也有帮助。

谢谢

相关内容

  • 没有找到相关文章

最新更新