java单元测试上下文配置spring
我正在为一个rest控制器进行单元测试,它只是一个更大应用程序的一小部分
理想情况下,我希望使用模拟框架来确保测试是统一的。我会嘲笑经理和刀
然而,这将需要对rest控制器类进行不同的配置,使他能够使用不同的管理器,这取决于我们是在测试上下文中还是在应用程序上下文中
模拟是在上下文测试中定义的。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 wich上下文使用。(我一次只想使用一个上下文)
有更好的解决方案吗
# 1 楼答案
我同意@chrylis。我认为这里的问题可能是你的课堂设计
如果你的
MyRestController
类依赖于知道哪个上下文被传入,那么这似乎是一个Spring/DI反模式。DI的全部要点是,类首先“被动地”以正确的行为处理上下文任何注入的对象都应该由注入上下文正确创建/处理
# 2 楼答案
您可以尝试添加
setManager()
方法,这将允许您将控制器中的管理器设置为“模拟”管理器