【问题标题】:How to Mock service consisting both Autowired and RequiredArgsConstructor in JUnit 5?如何在 JUnit 5 中模拟包含 Autowired 和 RequiredArgsConstructor 的服务?
【发布时间】:2021-11-30 08:38:23
【问题描述】:
@RequiredArgsConstructor
public class GService {

    @Autowired
    private GRepository repository;

    private final List<GRule> rules;

而我的测试课是这样的;

@ExtendWith(MockitoExtension.class)
class GServiceTest {

    @InjectMocks
    private GService service;

    @Mock
    private GRepository repository;

    @Mock
    private List<GameRule> rules;

规则没问题,但存储库未初始化且为空。如何初始化存储库?

【问题讨论】:

  • 删除@Autowired,创建字段final。重启。
  • 有没有办法做到这一点,还是我必须把它们全部做成最终的?这是唯一的方法吗?
  • 除非您想手动设置它们,否则应该更喜欢构造函数注入而不是字段注入。
  • 如果你不希望它是最终的,你也可以使用@AllArgsConstructor(虽然如果它是一个bean - 为什么不是最终的?)

标签: java spring mockito junit5 springmockito


【解决方案1】:

可以在 Before Method 中使用 ReflectionTestUtils.setField(...) 进行设置;

ReflectionTestUtils.setField(service, "repository", Mockito.mock(GRepository.class));

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 2020-03-04
    • 2022-11-11
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多