JUnit行为与常用Java类的静态最终变量

JUnit行为与常用Java类的静态最终变量,java,junit4,final,static-members,Java,Junit4,Final,Static Members,假设,我希望使用预定义的静态最终列表实例作为测试的某些“配置”的持有者。 这是一个列表,因此我使用静态{}块,其中一些值被添加到实例中: public class Config{ ... public static final List<Object[]> config = new ArrayList<>(); static{ //object[] are always pairs her`e config.add(new Object[] { ... w

假设,我希望使用预定义的静态最终列表实例作为测试的某些“配置”的持有者。 这是一个列表,因此我使用静态{}块,其中一些值被添加到实例中:

public class Config{
        ...
public static final List<Object[]> config = new ArrayList<>();
static{
//object[] are always pairs her`e
config.add(new Object[] { ... whatever});
config.add(new Object[] { ... whatever});
config.add(new Object[] { ... whatever});
}
}
...
//then the test class:
@RunWith(Parameterized.class)
public class GeneralTemplate{

...

    @Parameters(name = "{index}: source: {0} target: {1}")
    public static Collection<Object[]> config() {
        return Config.config;
    }
}
公共类配置{
...
public static final List config=new ArrayList();
静止的{
//对象[]总是成对的
config.add(新对象[]{…无论什么});
config.add(新对象[]{…无论什么});
config.add(新对象[]{…无论什么});
}
}
...
//然后测试类:
@RunWith(参数化的.class)
公共类GeneralTemplate{
...
@参数(name=“{index}:源:{0}目标:{1}”)
公共静态集合配置(){
返回Config.Config;
}
}
然后我将在JUnit测试类中使用这个实例。
我猜,由于这种定义+注释,测试运行时会出现错误“未找到任何测试”

我认为模板中缺少@test注释。编译器抱怨“未找到任何测试”,因为它在测试类定义中找不到任何带有junit 4@test注释的测试方法

虽然我无法重现您的问题,但应尝试以下操作:

public class Config{
    ...
  public static final List<Object[]> config = createConfig();

  private static List<Object[]> createConfig() {
    List<Object[]> config = new ArrayList<>();
    config.add(new Object[] { ... whatever});
    config.add(new Object[] { ... whatever});
    config.add(new Object[] { ... whatever});
  }
}
公共类配置{
...
公共静态最终列表config=createConfig();
私有静态列表createConfig(){
列表配置=新建ArrayList();
config.add(新对象[]{…无论什么});
config.add(新对象[]{…无论什么});
config.add(新对象[]{…无论什么});
}
}

或者把这个
createConfig
直接放进你的方法
config

它有点复杂和奇怪,带有@Test注释的方法是从超类继承的。但是,如果我将Config.Config替换为某个getConfig()方法,则测试将运行,在该方法中创建的列表(如关于@Parameters的教程中)静态成员属于类而不是特定实例。配置对象在任何类实例之前都在内存中。访问器方法用于获取和设置静态值。看起来您的变量是在静态初始化之前读取的。如果静态初始值设定项和初始化对象的用户之间存在循环依赖关系,则可能发生这种情况。你能给出一个完整的例子来重现这个问题吗(使用
@Test
和最小的配置/参数)。我不能给出完整的例子,它不是一个免费软件项目。一位熟人也说过同样的话:它可以取决于静态初始化的顺序。意味着,一些JUNIT函数/注释在静态{add}之前工作,并且读取空列表。你能给我一些建议吗,热的让它独立于订单?