如何设置@MockBean,以便@Autowired字段可以工作?

时间:2019-05-28 03:08:04

标签: java spring unit-testing

我有一个Spring测试用例,但我需要使用servlet上下文的模拟

@RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = App.class
)
public class SpringTest {
    @MockBean
    private ServletContext servletContext;
    @Autowired
    private ConfigManager configManager;

    @Before
    public void setupMocks() {
       when(servletContext.getAttribute("foo")).thenReturn("bar");
    }
    @Test
    public void test() { 
       assert configManager.get("foo").equals("bar");
    }
}

但是,由于测试失败,因此在自动装配(我认为)之后会调用设置模拟程序。

有其他地方可以做这种事情吗?

我最近要做的解决方法

@RunWith(SpringRunner.class)
@ContextConfiguration(
    classes = { App.class, SpringTest.class }
)
public class SpringTest {

    @Bean
    private ServletContext servletContext() {
        final ServletContext mock = mock(ServletContext.class);
        when(mock.getAttribute("foo")).thenReturn("bar");
        return mock;
    }

    @Autowired
    private ConfigManager configManager;

    @Test
    public void test() { 
       assert configManager.get("foo").equals("bar");
    }
}

但是我不喜欢这种方法,因为我必须将SpringTest.class放在上下文配置中,并且必须用@Bean做更多的样板代码。

0 个答案:

没有答案