简体   繁体   English

为什么我的Spring Boot自动连接的JPA存储库未通过JUnit测试?

[英]Why is my Spring Boot autowired JPA Repository failing JUnit test?

My JUnit test is failing with the following error: "java.lang.IllegalArgumentException: Could not find field [userRepository] of type [null] on target [com.clearsoft.demo.UserResource@756b2d90]" 我的JUnit测试失败,并出现以下错误:“ java.lang.IllegalArgumentException:在目标[com.clearsoft.demo.UserResource@756b2d90]上找不到类型为[null]的字段[userRepository]”

Here is the Test class: 这是Test类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
@WebAppConfiguration
@IntegrationTest
public class UserResourceTest {

    @Autowired
    private UserRepository userRepository;

    private MockMvc restUserMockMvc;

    @Before
    public void setup() {
        UserResource userResource = new UserResource();
        ReflectionTestUtils.setField(userResource, "userRepository", userRepository);
        this.restUserMockMvc = MockMvcBuilders.standaloneSetup(userResource).build();
    }

    @Test
    public void testGetExistingUser() throws Exception {
        restUserMockMvc.perform(get("/user/foo")
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().contentType("application/json"))
                .andExpect(jsonPath("$.id").value(1));
    }
}

And here is the UserResource service: 这是UserResource服务:

@RestController
public class UserResource {

    @Autowired
    UserRepository repository;

    @RequestMapping(value = "/user/{email}", method = RequestMethod.GET)
    User hello(@PathVariable("email") String email) {
        return repository.findByEmailAddressAllIgnoringCase(email);
    }

}

Here is the repository: 这是存储库:

public interface UserRepository extends Repository<User, Long> {

    Page<User> findAll(Pageable pageable);

    User findByEmailAddressAllIgnoringCase(String emailAddress);

}

And here is the Entity: 这是实体:

@Entity
@Table(name = "users")
public class User implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = -1680480089065575997L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 255)
    @Column(name = "email_address")
    @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
            + "[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
            + "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]"
            + "(?:[a-z0-9-]*[a-z0-9])?", message = "{invalid.email}")
    private String emailAddress;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getEmailAddress() {
        return emailAddress;
    }

    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }

}

Here is the App class: 这是App类:

@SpringBootApplication
public class App implements CommandLineRunner {

    @Autowired
    UserRepository repository;

    public static void main(String[] args) {
        SpringApplication.run(App.class);
    }

    @Override
    public void run(String... strings) throws Exception {
        System.out.println("**************** RUN RUN RUN RUN");
        for (User user : repository.findAll(null)) {
            System.out.println("****************" + user.getEmailAddress());
        }
    }
}

Exception comes from this line: 异常来自此行:

ReflectionTestUtils.setField(userResource, "userRepository", userRepository);

Second parameter of setField method is a field name. setField方法的第二个参数是字段名称。 UserResource has field "repository" - not "userRepository" as you try to set in your test. 尝试在测试中进行设置时, UserResource字段为“存储库”,而不是“ userRepository”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Spring Boot应用程序中的JUnit测试中没有自动装配JPA存储库的合格Bean - No qualifying bean for autowired JPA repository in JUnit test in Spring Boot application Spring Boot @Autowired Jpa存储库返回Null - Spring Boot @Autowired Jpa repository returns Null Spring数据jpa存储库注入失败,在Spring启动时使用@Autowired - spring data jpa repository inject fails using @Autowired in spring boot 有没有办法在使用Spring或Spring Boot的JUnit测试中使用Autowired构造函数? - Is there a way to use Autowired constructor in JUnit test using Spring or Spring Boot? Spring Boot中针对REST API的JUnit测试失败 - Failing JUnit test for REST API in Spring Boot Spring 引导 JUnit 5 测试失败,null 指针 - Spring Boot JUnit 5 test failing with null pointer 为具有自动装配组件的Spring Boot Service应用程序编写JUnit测试用例 - Writing JUnit test cases for a Spring Boot Service Application with autowired components Spring 4.07 Junit测试并自动接线 - Spring 4.07 Junit Test and Autowired 为什么使用 JUnit 5 运行此 Spring Data JPA Repository 测试会导致 ParameterResolutionException? - Why does running this Spring Data JPA Repository test with JUnit 5 cause a ParameterResolutionException? 如何在 Spring Boot 中实现通用 JPA 存储库 - 它可以自动装配到任何实体/类类型的 spring 服务中 - How to implement Generic JPA Repository in Spring Boot - Which can be autowired into spring services for any entity/class type
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM