Java junit-测试从未安装过的类的私有方法

Java junit-测试从未安装过的类的私有方法,java,spring,spring-mvc,junit,Java,Spring,Spring Mvc,Junit,因此,我们的堆栈在Spring上,并且说类向导仅从UI更改中调用。在xhtml上,其名称如下: `<.....onchange="changeValue()" value="wizard.type.name">` 比如说getName()调用一个私有方法getWizardBearfill()-我如何在junit中的一个单独的项目中测试getWizardBearfill()(比如说TestWizard但在同一个工作区中)?你不应该测试私有方法。测试应该只通过公共接口方法进行。所以您的

因此,我们的堆栈在
Spring
上,并且说类
向导
仅从UI更改中调用。在
xhtml
上,其名称如下:

`<.....onchange="changeValue()" value="wizard.type.name">`
比如说
getName()
调用一个私有方法
getWizardBearfill()
-我如何在junit中的一个单独的项目中测试
getWizardBearfill()
(比如说
TestWizard
但在同一个工作区中)?

你不应该测试私有方法。测试应该只通过公共接口方法进行。所以您的测试都应该通过
getName()

通过不测试私有方法,您的测试就不那么脆弱了,因为如果您更改了私有方法,测试就会中断。维护和重构类要容易得多,因为知道只要公共方法仍然做正确的事情(这些都在测试中涉及),修改私有方法就不会破坏任何东西

从API的角度来看,
getName()
还需要
getWizardBearm()
,这让我觉得很奇怪。除非武器是名字的一部分(这很奇怪)


如果您不能仅通过调用公共方法来通过私有方法执行所有代码路径,那么可能您有可以删除的死代码?

作为@dkatzel的补充回答:如果您确实需要测试一些实现细节,但不想将其暴露于外部世界,请使用不是
private
,而是
package private
,并将测试用例放在同一个包中(当然是放在单独的源目录中,如
main/com/example/Wizard
test/com/example/TestWizard
)。

在JUnit中实例化它并使用反射如何?请参阅在类外部可见的测试“接口”。所以在本例中使用getName。否则,您可能会将太多的测试与您的实现相结合。
public Wizard(){}