单元测试上下文配置spring

问题描述 投票:0回答:2

我正在为休息控制器进行单元测试,这只是更大应用程序的一小部分。
理想情况下,我想使用模拟框架来确保测试是单一的。我会嘲笑经理和道。
然而,这需要对其余控制器类进行不同的配置,使他使用不同的管理器,具体取决于我们是在测试上下文中还是在应用程序上下文中。
模拟在 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
@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 使用哪个上下文。 (我一次只想使用一个上下文)

有更好的解决方案吗?

java spring unit-testing configuration
2个回答
0
投票

我同意@chrylis。我认为这里的问题可能是你的班级设计。

如果你的

MyRestController
类依赖于知道传入的 which 上下文,那么这似乎是 Spring/DI 反模式。 DI 的全部意义在于,类首先“被动”地以正确的行为处理上下文。

任何注入的对象都应该由注入上下文正确创建/处理。


0
投票

您可以尝试添加

setManager()
方法,这将允许您将控制器中的管理器设置为“模拟”管理器。

© www.soinside.com 2019 - 2024. All rights reserved.