我有一个独立的 Java 应用程序,它使用 Java JAX-WS 创建服务。我想创建测试用例来测试服务,我该怎么做?
我想过在项目之外使用外部客户端,这是最好的方法吗?
我有一个独立的 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);
}
}
然后我将对我的 UserService 实现进行单元测试。