Java 静态字段的JUnit初始化
我正在使用JUnit进行单元测试。假设我想测试classJava 静态字段的JUnit初始化,java,testing,junit,static,Java,Testing,Junit,Static,我正在使用JUnit进行单元测试。假设我想测试classB(classB的方法)。假设我们有另一个类A,它是主类(包含main方法),并且有一些受保护的静态字段 现在,类B使用了类A的一些静态字段。因此,如果我正在测试类B,那么类A的这些静态字段不存在 如何在不执行程序(执行classA)的情况下测试classB 编辑:我必须澄清一下。假设src/package1/classA.java中有以下类A: public classA { protected static int field1;
B
(classB
的方法)。假设我们有另一个类A
,它是主类(包含main
方法),并且有一些受保护的静态
字段
现在,类B
使用了类A
的一些静态字段。因此,如果我正在测试类B
,那么类A
的这些静态字段不存在
如何在不执行程序(执行classA
)的情况下测试classB
编辑:我必须澄清一下。假设src/package1/classA.java中有以下类A:
public classA {
protected static int field1;
protected static int field2;
public static void main(String[] args) {
// initialize static fields.
}
}
现在让我们假设在同一个包src/package1/classB.java中有另一个类B
public ClassB {
public ClassB() {
// Do some stuff.
}
public void someMethod() {
// Access of static fields from A.
classA.field1....
classA.field2....
}
}
现在我在test/package1/classBTest.java中有一个JUnit测试,用于测试类B。但问题是field1和field2没有初始化
如何在JUnit中手动初始化classA.field1和classA.field2这两个字段,而不执行class A的main方法?您可以调用classA的main方法。main(somestrArray),它应该进行初始化 但是如果您不想这样做,那么您可以在与原始类相同的包中创建junit测试,并且您可以访问受保护的变量。ClassA.field1=1;等等。顺便说一句,它不必在同一个项目,只是包的名称应该是相同的
如果这还不行,那么您需要重构ClassA以适应这种情况。有一个进行初始化等操作的方法。当你谈论class
a
时,你是指私有静态字段吗?如果它们是私有的,那么classB
将不被允许访问它们,无论是使用JUnit还是其他方式。不,我是说class A中受保护的静态字段。class A和class B在同一个包中。我认为您必须向我们展示引发错误的代码,以及引发错误的确切错误消息。从B
中引用A
中的静态字段似乎没有问题,因此您需要编辑问题并提供更多信息。通常,这表明存在设计问题。在测试中,初始化A.field1
和A.field2
,然后调用bUnderTest.someMethod()
。但我同意这是一个丑陋的设计。为什么field1和field2没有作为参数传递给方法或B构造函数?全局的、可变的状态是你想不惜一切代价避免的。谢谢。在类A中使用静态字段并在类B中使用这些字段(如ClassA.field1)是更好的做法,还是在类A中使用非静态字段,然后将这些字段作为参数传递给类B中的函数(例如构造函数)更好?我只是从编程的角度来看,而不是JUnit。我个人会使用非静态变量