无酒精未注入MVC控制器测试



我正在尝试隔离春季应用程序上下文。

这是我的控制器

@RestController
public class AddressesController {
    @Autowired
    service service;
    @GetMapping("/addresses/{id}")
    public Address getAddress( @PathVariable Integer id ) {
        return service.getAddressById(id);
    }
}

我的服务接口

public interface service {
    Address getAddressById(Integer id);
}

这是我的测试类

@ExtendWith(SpringExtension.class)
@WebMvcTest
public class AddressControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @MockBean
    service myService;
    @Test
    public void getAddressTest() throws Exception {
        Mockito.doReturn(new Address()).when(myService).getAddressById(1);
        mockMvc.perform(MockMvcRequestBuilders.get("/addresses/1"))
                .andExpect(status().isOk());
    }
}

这是我得到的例外:

org.mockito.exceptions.misusing.nullinsteadofmockexception:参数 传递到((为null时!正确的固执示例: dothrow(new RuntimeException(((。当(模拟(.somemethod((;另外,如果您使用@Mock注释,请不要错过Initmocks((

这就像从未创建服务一样。我该如何解决这个问题?

我们可以使用@RunWith(SpringRunner.class)代替@ExtendWith(SpringExtension.class)解决此问题。有人可以解释为什么它起作用吗?通常,第一个注释是针对junit4的,后来的junit5。

不幸的是,由于依赖性问题解决了问题。

我的pom.xml文件包含 spring-boot-starter-test,如果我们检查包含此启动器的内容,我们会发现它包含junit4作为依赖项而不是junit5。

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
  <scope>compile</scope>
</dependency>

当我尝试使用@extendwith(SpringExtension.class(的测试类中使用JUNIT5时,测试不幸地编译,但给出了运行时错误。我通过排除春季启动器中的Junit4来解决:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

我的pom.xml也应包含junit5依赖项

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.3.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.3.2</version>
    <scope>test</scope>
</dependency>

相关内容

  • 没有找到相关文章

最新更新