我正在为一个休息控制器进行单元测试,这只是一个更大的应用程序的一小部分
理想情况下,我想使用模拟框架来确保测试是单一的。我会嘲笑经理和道
但是,如果我们处于测试环境或应用程序环境中,则需要对其余控制器类使用不同的配置,这使得他使用不同的管理器。
模拟在context-test.xml中定义。
这是我到目前为止所做的:
测试RestController
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(locations = "classpath:/META-INF/spring/context-test.xml")
@WebIntegrationTest
public class MyRestControllerTest extends AbstractTransactionnalTest {
@Autowired
private IManager manager;
@Test
// my unit tests
}
RestController
@RestController
@SpringApplicationConfiguration(locations = {"classpath:/META-INF/spring/context-test.xml",
"classpath:/META-INF/spring/context-application.xml"})
@RequestMapping("/me")
class MyRestController {
@Autowired
private IManager manager;
// Content of my controller
}
到目前为止我的解决方案的主要问题:
- 我不知道如何告诉RestController使用上下文。 (我只想一次使用一个上下文)
有更好的解决方案吗?
答案 0 :(得分:0)
您可以尝试添加setManager()
方法,这样您就可以将控制器中的管理员设置为“模拟”'管理器。
答案 1 :(得分:0)
我同意@chrylis。我认为这里的问题可能是你的课堂设计。
如果你的MyRestController
类依赖于知道传入哪个上下文,那么这似乎是一个Spring / DI反模式。 DI的全部意义在于,被动地"被动地"首先处理具有正确行为的上下文。
任何注入的对象都应该由注入上下文正确创建/处理。