我有一个独立的Java应用程序,它使用Java JAX-WS创建服务。 我想创建测试用例来测试服务,我该怎么做?
我想过在项目之外使用外部客户端,这是最好的方法吗?
严格来说,部署 Web 服务并对其进行测试是集成测试,而不是单元测试。话虽如此,对此进行单元测试可能更好。我将创建一个单独的层来实现业务逻辑,而另一个层将其公开为 Web 服务。然后,您可以测试业务逻辑,而不必担心 Web 服务。
毕竟,您可能不想费心重新测试用于启动 Web 服务的 Web 框架。您确实想测试您的业务逻辑。这将使您能够创建更快、更不脆弱的测试。
关于集成与单元测试的争论可能会继续下去。仅删除 Web 服务层并测试内部业务逻辑不会将集成测试更改为单元测试。
恕我直言,Web 服务是应用程序中的公共 API,您需要它们在应用程序版本之间一致地工作。因此,我推荐一个广泛的 soapUI 测试套件,像普通客户端一样点击您的应用程序和数据库。您可以添加断言来检查预期的成功和失败消息(不要忘记测试当向 Web 服务抛出不正确的数据时它们时执行的操作(。此外,您还可以添加 groovy 断言,以便在每次 Web 服务调用后检查数据库状态。
我完全推荐快速运行的单元测试来补充上述内容,但是每晚针对您的通宵构建运行一个强大的集成套件将确保您的 API 的质量并避免许多问题,否则这些问题只会在您的客户开始访问您的服务时被清除。
Web 服务的本质是它们没有 UI,因此如果留给人类测试人员,则不会经过很好的测试。
我认为我不会测试实际的 Web 服务端点或客户端。 我会将所有业务逻辑移动到某个服务层,然后对这些对象进行单元测试。 例如:
@Path("/user")
public class UserWebService {
@Inject
private UserService userService;
@Path("/delete")
public void deleteUser(@RequestParam long id) {
userService.deleteUser(id);
}
}
然后我会对我的用户服务实现进行单元测试。