Spring Boot Controller测试-模拟存储库但测试实际服务

美娜

我正在尝试在Spring Boot 2编写一个测试类,其中:

  • 我想测试一个控制器
  • 我想模拟一个仓库
  • 我想按原样注入服务(即模拟它)

该类如下所示:

@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {
    @Autowired
    private MockMvc mvc;
    @MockBean
    private MyRepositoryInterface myRepository;
    @Autowired
    private MyService myService;
    // tests follow ...
}

的(唯一)实现MyService带有注释,@Service并允许通过其@Autowired构造函数注入存储库

@Service
public class MyActualService implements MyService {
    private MyRepository repo;
    @Autowired
    public MyActualService(MyRepository repo) {
        this.repo = repo;
    }
    // ...
} 

NoSuchBeanDefinitionException在运行测试时,我得到了一个概括的说法,即“不可MyService用”。

我怀疑我可能需要针对测试的特定配置才能使用该服务,但是我对可用的在线文献完全感到困惑。

有指针吗?

美娜

正如jonsharpe所指出的,在查阅了文档之后(一开始我没有正确阅读),我设法解决了一个可行的解决方案:

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {
    @Autowired
    private MockMvc mvc;
    @MockBean
    private MyRepositoryInterface myRepository;

    // no need to reference the service explicitly

    // ... tests follow
}

上面的代码在加载整个应用程序配置时检索该服务,并且仅按指示对存储库进行模拟。

我可能可以编写临时配置来更好地满足要求,但这已经“开箱即用”了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章