我应该为 void 方法(包括存储库调用)编写单元测试吗?

Should I write unit test for void methods (includes repository call)?

我的 spring 启动应用程序中有以下代码片段:

@Service
public class UserServiceImpl implements UserService {
    private final UserRepository userRepository;

    public UserServiceImpl(UserRepository ...) {...}

    @Override
    public void saveOrUpdateUser(UserDAO user) {
        userRepository.save(user);
    }
}

测试用例class:

class UserServiceImplUnitTest  {

    private UserRepository userRepository = mock(UserRepository.class);

    private UserService userService;

    @BeforeEach
    void setup() {
        userService = new UserServiceImpl(userRepository);
    }
}

我正在使用 mockito 编写我的测试用例。但是,对于这个 void 方法,我应该编写测试用例吗?如果可以,怎么写?

是的。您应该主要关注 UserServiceImpl 是否以预期的方式与 UserRepository 交互,例如它是否使用正确的参数在 UserRepository 上调用正确的方法等

通过使用 Mockito 模拟 UserRepository ,您可能会得到如下所示的测试:

@ExtendWith(MockitoExtension.class)
public class UserServiceImplUnitTest  {

    @Mock
    UserRepository userRepository ;

    UserService userService;

    @BeforeEach
    void setup() {
        userService = new UserServiceImpl(userRepository);
    }

    @Test
    public void testSaveOrUpdateUser(){
        UserDAO user = createDummyUser();
        userService.saveOrUpdateUser(user);

        verify(userRepository).save(same(user));
    }
}