仅用于测试的Java服务方法

仅用于测试的Java服务方法,java,service,interface,Java,Service,Interface,有没有办法只在测试类中使用服务方法(在服务层(接口)中实现的方法) 在我的服务接口中,我有一个只想在测试类中使用的方法 并防止或向其他开发人员显示一些警告,这些开发人员在他们的应用程序中没有使用它 managerImpl或其他类似controller的工具不,Java中没有警告开发人员使用方法的概念 如果你“真的”需要这样一种方法,或者你可以改变你的设计,不需要这样一个后门,重新考虑一下。(例如,利用依赖注入的功能)。根据我的经验,这总是可能的 如果您仍然确信希望在测试代码中实现此方法(例如,通

有没有办法只在测试类中使用服务方法(在服务层(接口)中实现的方法)

在我的服务接口中,我有一个只想在测试类中使用的方法 并防止或向其他开发人员显示一些警告,这些开发人员在他们的应用程序中没有使用它
managerImpl或其他类似controller的工具

不,Java中没有警告开发人员使用方法的概念

如果你“真的”需要这样一种方法,或者你可以改变你的设计,不需要这样一个后门,重新考虑一下。(例如,利用依赖注入的功能)。根据我的经验,这总是可能的


如果您仍然确信希望在测试代码中实现此方法(例如,通过子类化),而不是在生产代码中实现此方法。

否,Java中没有任何概念可以警告开发人员使用方法

如果你“真的”需要这样一种方法,或者你可以改变你的设计,不需要这样一个后门,重新考虑一下。(例如,利用依赖注入的功能)。根据我的经验,这总是可能的


如果您仍然确信希望在测试代码(例如,通过子类化)中实现此方法,而不是在生产代码中实现此方法。

请确切说明以下措辞:

如果你真的在谈论Java接口的方法;然后Java8将允许您提供一个默认实现,例如可以抛出一个异常;然后你有非常具体的类来实现这个接口,为了测试的目的可能会重写这个方法

如果你说的是一般的“接口”;例如“某个类的方法列表”。。。然后这种“基本投掷”和“儿童覆盖”也可以起作用

当然,第一个答案可能是可见性本身。如果我们不是在谈论真正的界面;您至少可以使方法包受到保护;然后,使用仅限于同一个包

另一种选择是遵循和隔离接口。如果有只用于“测试”的东西;然后考虑把这些东西放入一些“测试支持界面”;或者类似的东西

但再一次;这些想法大多是“按惯例”运作的;通过提供用户必须消化的某种信息。。。但这是无法强制执行的


最后,您可以考虑更改生产代码。通常,您可能不需要这样的“特殊测试获取者”。换句话说:如果您的测试像“获取X的状态。对X做点什么。再次获取X的状态并进行比较”。有时,这可以更改为基于行为的测试(你不检查X发生了什么,但你检查X对Y、Z……做了什么)。

让我们准确地说一下:

如果你真的在谈论Java接口的方法;然后Java8将允许您提供一个默认实现,例如可以抛出一个异常;然后你有非常具体的类来实现这个接口,为了测试的目的可能会重写这个方法

如果你说的是一般的“接口”;例如“某个类的方法列表”。。。然后这种“基本投掷”和“儿童覆盖”也可以起作用

当然,第一个答案可能是可见性本身。如果我们不是在谈论真正的界面;您至少可以使方法包受到保护;然后,使用仅限于同一个包

另一种选择是遵循和隔离接口。如果有只用于“测试”的东西;然后考虑把这些东西放入一些“测试支持界面”;或者类似的东西

但再一次;这些想法大多是“按惯例”运作的;通过提供用户必须消化的某种信息。。。但这是无法强制执行的


最后,您可以考虑更改生产代码。通常,您可能不需要这样的“特殊测试获取者”。换句话说:如果您的测试像“获取X的状态。对X做点什么。再次获取X的状态并进行比较”。有时,这可以更改为基于行为的测试(您不检查X发生了什么,但检查X对Y、Z……做了什么)。

通常最好不要在生产代码中“仅用于测试”添加任何内容

您可以创建一个专用于所有用户的服务,并将其放置在您的测试类路径中。
根据您的实现,此服务可能是生产用户服务的子类

通常最好不要在生产代码中添加任何内容“仅用于测试”

您可以创建一个专用于所有用户的服务,并将其放置在您的测试类路径中。
根据您的实现,此服务可能是生产用户服务的子类

除了其他好的答案之外:如果您确实需要一个方法由测试用例调用,而不是由生产代码调用,那么您可以将此方法设置为私有的
。因此,除非有人改变可见性,否则没有人会使用这种方法。在您的测试用例中,您可以通过调用它


但要小心:这通常被认为是代码气味。对于您的IDE,这是一个私有且未使用的方法,因此将出现一条警告消息。其他人可能会因此而删除此方法。

除了其他好的答案之外:如果您确实需要一个方法由测试用例调用,而不是由生产代码调用,您可以将此方法设置为私有的。因此,除非有人改变可见性,否则没有人会使用这种方法。在您的测试用例中,您可以通过调用它


但要小心:这通常被认为是代码气味。对于您的IDE,这是一个私有且未使用的方法,因此将出现一条警告消息。其他人可能会因此删除此方法。

我正在为我们的业务服务方法编写测试类,在我的测试用例中,我需要