我正在尝试为我的Sping Boot 应用程序编写一个测试方法,它在Zoom上创建一个会议。我以前没有做过任何单元测试,这是我第一次尝试。
我想在不同的场景(不同的会议类型)下测试我的服务的create方法,为了测试它,我需要我的MeetingService
接口,当我尝试用Lombok的@RequiredArgsConstructor
自动连接它时;我收到以下错误消息:
异常错误类型:没有为构造函数[公共技术.观察对象.缩放.缩放集成服务应用程序测试(技术.观察对象.缩放.服务.会议服务,技术.观察对象.缩放.配置.帐户配置)]中的参数[技术.观察对象.缩放.服务.会议服务arg 0]注册参数解析器。
缩放集成服务应用程序测试:
package tech.obss.zoom;
@SpringBootTest
@RunWith(SpringRunner.class)
@RequiredArgsConstructor
@ActiveProfiles("test")
class ZoomIntegrationServiceApplicationTests {
private final MeetingService meetingService;
private final AccountConfig accountConfig;
@ParameterizedTest
@ValueSource(ints = { 1, 2, 3, 4 })
void createMeeting(int type) {
User user = User.builder().email(accountConfig.getEmail()).userId(accountConfig.getUserId()).build();
meetingService.createMeeting(...);
}
}
我已经看到了一个解决方案,通过使用@BeforeEach
注解和自己创建服务。但是,我的MeetingService在其构造函数上有另外5个不同的类,这5个类有不同的依赖关系。这就是为什么我很难这样做。
会议服务实作:
@Service
@Slf4j
@RequiredArgsConstructor
public class MeetingServiceImpl implements MeetingService {
private static final Duration REQUEST_TIMEOUT = Duration.ofSeconds(3);
private final MeetingRepository meetingRepository;
private final CreateMeetingRepository createMeetingRepository;
private final WebClient zoomWebClient;
private final MeetingMapper meetingMapper;
private final AccountConfig accountConfig;
@Override
public MeetingDto createMeeting(CreateMeeting createMeeting) {
...
}
}
有没有更简单的方法来解决这个问题?
1条答案
按热度按时间8hhllhi21#
您看到的异常是由您的测试类
ZoomIntegrationServiceApplicationTests
被JUnit示例化的事实引起的。JUnit不知道您的Spring服务,这就是为什么它不知道如何解析测试类的构造函数的参数(您可以从异常的名称以org.junit...
开头这一事实推断出这一点)解决这个问题最简单的方法是从测试类中删除
@RequiredArgsConstructor
注解,并使用@Autowired
注解字段,如下所示:Spring还有一个
@TestConstructor
注解,可以用于运行JUnit Junipter测试的应用程序。