当前位置: 首页 > 知识库问答 >
问题:

SpringBoot组件autowired从测试类null

澹台承
2023-03-14

当我使用@service时,它工作得很好。

当我使用@RESTController时,它抛出一个NullPointerException。

它不能把控制器连上电线是不是有什么原因?我想它可能与创建web上下文有关,但我也尝试添加SpringBootTest和指向MOCK(和其他)的webEnvironment,看看这是否能让它发挥作用。

我也踢过MockMvc的东西,但我不确定它应该如何工作。

有什么方法可以轻松地调用其中一个控制器来完成完整的集成测试用例吗?

@Autowired
private ThingService tservice;

@Autowired
private ThingController tconn;

@Test
public void testRunThing() {
    Thing t = new Thing(1, "Test");
    tservice.configureThing(t);
    Thing t2 = new Thing(1, "Second thing");
    tconn.getThing(t2);

    t3 = tservice.findThing(1);
    assertEqual(t3.getValue(), "Second thing");
}

tservice函数做了一些工作,包括最终持久化到一个DB(在本例中是H2,它通过存储库将其引入)。

tconn函数处理更新,就像它被发送到restendpoint一样(在本例中,它将ID为1的“thing”更新为新的字符串值)

空指针显示在tconn.getThing()调用中。

共有1个答案

禹兴安
2023-03-14

MockMvc用法的简单示例:测试类

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class LoginControllerTest {

    @Autowired
    private MockMvc mockMvc;

简单测试

        @Test
        public void loginOk() throws Exception {
            this.mockMvc.perform(post("/login").param("username", "name")
                    .param("password", "1111" )).andExpect(status().isOk())
         .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8));
        }

如果您只想检查它是否是响应对象,可以使用

 .andExpect(content().json("{}"));
 .andExpect(content().json("[]"));
.andExpect(content().json("[{}, {}]"));
 MvcResult result = this.mockMvc.perform(post("/login").param("username", "name")
                    .param("password", "1111" )).andExpect(status().isOk())
                    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)).andReturn();
String resultJsonString = result.getResponse().getContentAsString();
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
 类似资料:
  • 问题内容: 我已经使用过JUnit,但是某些测试存在一些问题,这些测试在Spring bean内具有@Autowired批注,当我引用它们时,@ Autowired的bean始终为NULL。 这是示例代码: 当调用Manager对象时,Spring会生成代理,但是当访问@Autowired parameterManager时,该对象为null,并且由于这个问题,我无法测试此方法。 知道是什么原因造

  • 我使用JUnit,但有些测试有一些问题,这些测试在Spring bean中有@Autowired注释,当我引用它们时,@Autowired的bean总是为空。

  • 我想在Spring中测试注入依赖关系。 我想要一个这样的测试: 我尝试过使用ContextConfiguration和一个测试配置文件,但是测试失败了,我不想在测试中使用@autowired,我想创建我的类的一个实例,并且bean是自动autowired的。

  • 我在SpringBoot 2上有一个应用程序。x个 pom。xml 这是应该自动连接的类。。。 pom。xml 更新 这个类来自类似的项目,它可以工作(但Intellij的想法将字段标记为错误) 在src/test/java/weblogic/war/Spring/boot/service/read/CompanyReadServiceTest.java 我复制了一个项目。 更新\u 2 我清除了

  • 英文原文:http://emberjs.com/guides/testing/testing-components/ 单元测试方案和计算属性与之前单元测试基础中说明的相同,因为Ember.Component集成自Ember.Object。 设置 在测试组件之前,需要确定测试应用的div已经加到测试的html文件中: 1 2 <!-- as of time writing, ID attribut