Java 静态字段的JUnit初始化

Java 静态字段的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;

我正在使用JUnit进行单元测试。假设我想测试class
B
(class
B
的方法)。假设我们有另一个类
A
,它是主类(包含
main
方法),并且有一些
受保护的静态
字段

现在,类
B
使用了类
A
的一些静态字段。因此,如果我正在测试类
B
,那么类
A
的这些静态字段不存在

如何在不执行程序(执行class
A
)的情况下测试class
B

编辑:我必须澄清一下。假设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
时,你是指私有静态字段吗?如果它们是私有的,那么class
B
将不被允许访问它们,无论是使用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。我个人会使用非静态变量