同步取决于静态字段?

时间:2017-08-02 20:57:44

标签: java static synchronization

我正在使用一个名为XMLUnit的实用程序类,它具有静态属性来忽略空格。我在测试中使用它,如下所示:

    XMLUnit.setIgnoreWhitespace(true);
    DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual));

    detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
    List<Difference> allDifferences = detailedDiff.getAllDifferences();

但有些测试不会忽略这些空格,我认为我们的Jenkins并行运行它们。确保我不会影响其他测试的最佳方法是什么?我可以像下面一样在XMLUnit类上进行同步吗?

    synchronized (XMLUnit.class) {
        XMLUnit.setIgnoreWhitespace(true);
        DetailedDiff detailedDiff = new DetailedDiff(XMLUnit.compareXML(expected, actual));

        detailedDiff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
        List<Difference> allDifferences = detailedDiff.getAllDifferences();
        XMLUnit.setIgnoreWhitespace(false);
    }

另外,如果我有多个maven模块在jenkins上并行构建,并且它们都使用这个类,那么行为是什么?每个模块都有它自己的XMLUnit.class实例吗?

1 个答案:

答案 0 :(得分:0)

同步类可以工作,只要没有任何东西依赖于同步类块之外的xml内容(我的意思是,这不足以同步标志真/假语句,而是依赖于它的所有内容;代码你粘贴似乎是正确的,但是你是那个知道在同步之外是否有更多依赖那个标志的人。)

如果这隐含意味着整个测试都在同步块内,这实际上意味着该测试中的任何内容都不能并行执行;那么最好只是对你的测试进行分类并确保&#34; xml依赖&#34;测试按顺序执行(其余的仍然可以并行执行)。

关于maven问题,无论它做什么,一切都应该是好的。如果相同的过程你的锁将确保没有任何破坏;如果不同的过程,测试是完全孤立的。