如何修复“找不到ModelAndView”失败的测试?

帕夫洛·普林科

此类在我的测试层次结构的顶部:

@TestPropertySource("/test.properties")
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public abstract class ApplicationAbstractTest {
}

还有更多测试类:

@WebAppConfiguration
@ActiveProfiles("mysql")
abstract public class AbstractControllerTest extends ApplicationAbstractTest {

    protected MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @PostConstruct
    private void postConstruct() {
        mockMvc = MockMvcBuilders
                .webAppContextSetup(webApplicationContext)
                .apply(springSecurity())
                .build();
    }
}

JsonUserServiceTest:

@ActiveProfiles("json")
public class JsonUserServiceTest extends ApplicationAbstractTest {
    @Before
    public void setUp() throws Exception {
        ...
    }
}

ContactControllerTest:

public class ContactControllerTest extends AbstractControllerTest {
    @Test
    public void testGet() throws Exception {
        mockMvc.perform(get("/update-" + ID + "-contact")
                .with(userAuth(USER)))
//                .andExpect(status().isOk())
                .andDo(print())
                .andExpect(view().name("details"))
                .andExpect(forwardedUrl("/WEB-INF/jsp/details.jsp"));
    }
}

因此,当我继续运行ContactControllerTest时-成功,并且print方法向我显示:

Handler:
             Type = com.telecom.web.ContactController
           Method = public java.lang.String com.myApp.web.ContactController.details(java.lang.Integer,org.springframework.ui.ModelMap)

但是,当我运行所有测试时,JsonUserServiceTest首先运行,将ContactControllerTest失败。print显示:

Handler:
             Type = null
...
java.lang.AssertionError: No ModelAndView found

配置有什么问题?或如何解决?

UPD:同时,像这样进行测试,始终可以正常工作:

public class UserControllerTest extends AbstractControllerTest {
    @Test
    public void testRegister() throws Exception {
        mockMvc.perform(get("/register"))
                .andDo(print())
                .andExpect(view().name("profile"))
                .andExpect(forwardedUrl("/WEB-INF/jsp/profile.jsp"));
    }
}

UPD:我正在测试控制器的方法:

@GetMapping("/update-{id}-contact")
public String details(@PathVariable Integer id, ModelMap model) {
    Integer userId = AuthorizedUser.id();
    LOG.info("get contact {} for User {}", id, userId);
    Contact contact = service.get(id, userId);
    model.addAttribute("contact", contact);
    return "details";
}

我也有这样的豆子:

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass(JstlView.class);
    viewResolver.setPrefix("/WEB-INF/jsp/");
    viewResolver.setSuffix(".jsp");

    return viewResolver;
}

UPD:我已经尝试在单独的类中配置mockMvc:

@Configuration
public class TestConfig {

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Bean
    public MockMvc mockMvc() {
        return MockMvcBuilders
                .webAppContextSetup(webApplicationContext)
                .apply(springSecurity())
                .build();
    }
}

并在这里添加:

@WebAppConfiguration
@ContextConfiguration(classes = {TestConfig.class})
@ActiveProfiles("mysql")
abstract public class AbstractControllerTest extends ApplicationAbstractTest {

但我收到了:

java.lang.IllegalStateException:springSecurityFilterChain不能为null。确保存在名为springSecurityFilterChain的实现Filter的Bean,或注入要使用的Filter。

阿卜杜勒·拉赫曼(Abdul Rahman)

WARN消息不会导致测试用例失败。只是说实体管理器工厂已注册两次。仅当您使用相同的Entity Manager Factory集群应用程序时,这才是问题。对于测试用例,它不是引起关注的原因。

测试用例失败的根本原因在于这两行

 .andExpect(view().name("details"))
 .andExpect(forwardedUrl("/WEB-INF/jsp/details.jsp"));

请检查项目是否有一个名为“ details”的视图,转发的URL为“ /WEB-INF/jsp/details.jsp”

更新资料

你可以试试这个吗

@Configuration
public class TestConfig {


@Autowired
private Filter springSecurityFilterChain;

@Autowired
private WebApplicationContext webApplicationContext;

@Bean
public MockMvc mockMvc() {
    return MockMvcBuilders
            .webAppContextSetup(webApplicationContext)
            .apply(springSecurityFilterChain)
            .build();
}
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Junit测试中找不到符号失败

Maven测试失败:找不到符号

宝石集成测试失败,找不到jQuery

测试失败,出现“找不到方法”错误

如何修复“导入错误:DLL 加载失败:找不到指定的过程”。在导入 tensorflow-gpu 时?

如何修复“找不到方法defaults()”?

如何修复“ pyenv:bash:找不到命令”

如何修复 NestJS 中的“找不到 bcrypt”?

zsh:找不到命令:laravel - 如何修复

如何修复找不到的getaddrinfo定义?

如何修复找不到合适的构造函数

如何修复找不到模块“ fs”

如何修复Laravel中找不到的类

如何修复python中找不到的模块

如何修复“找不到默认的Python”错误

如何修复:找不到命令-Git Alias

如何修复“找不到模块'./commands/${file}'”

如何修复“找不到方法”错误?

如何修复找不到模块“redux”?

由于找不到拦截器类,gradle测试失败

CircleCI:$ npm测试失败,找不到安装的软件包

Android Studio找不到AndroidJUnit4.class +测试失败

Xcode Build Server失败。找不到配置用于测试的设备

iOS应用测试。应用安装失败。找不到代码签名

PHPUnit测试失败-找不到'PHPUnit \ Framework \ Assert'

隐藏的CodeFights测试失败-在代码中找不到缺陷

如何修复在绑定组件中找不到方法 onLoginButtonClick

如何修复Google脚本中的“ TypeError:找不到函数insertColumns”

如何修复“异常:找不到boost_python库”?