【问题标题】:JDepend Dependency Constraint FailingJDepend 依赖约束失败
【发布时间】:2010-12-24 19:16:00
【问题描述】:

我正在使用 JDepend 来分析我的架构并创建结构测试来验证分层架构中的依赖关系。两个相关层是 com.domain 和 com.infrastructure。领域具体取决于基础设施层。

为什么下面的测试失败了?

import java.io.IOException;
import jdepend.framework.DependencyConstraint;
import jdepend.framework.JDepend;
import jdepend.framework.JavaPackage;
import junit.framework.TestCase;

public class DependencyTest extends TestCase {

    private JDepend jdepend;

    @Override
    public void setUp() throws IOException {
        jdepend = new JDepend();

        jdepend.addDirectory("build/classes/com");
    }

    public void testDomainDependsOnInfastructure_ShouldBeTrue() {
        DependencyConstraint constraint = new DependencyConstraint();

        JavaPackage domainPackage = constraint.addPackage("com.domain");
        JavaPackage infastructurePackage = constraint.addPackage("com.infrastructure");

        domainPackage.dependsUpon(infastructurePackage);
        jdepend.analyze();

        assertEquals("Domain doesn't depend on Infrastructure layer", true, jdepend.dependencyMatch(constraint));
    }

}

jdepend.analyze() 返回相关的包,所以我知道它正在查找我的代码。有什么想法吗?

【问题讨论】:

    标签: java jdepend


    【解决方案1】:

    想通了。 JDepend 的 match 函数检查所有包,包括库。我必须只用我想要的包来自定义加载它。这是解决我的问题的代码,如果有人遇到这个问题的话。

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Collection;
    import jdepend.framework.DependencyConstraint;
    import jdepend.framework.JDepend;
    import jdepend.framework.JavaPackage;
    import junit.framework.TestCase;
    
    public class DependencyTest extends TestCase {
    
        private JDepend jdepend;
    
        @Override
        public void setUp() throws IOException {
            jdepend = new JDepend();
            jdepend.addDirectory("build/classes/com");
        }
    
        public void testDomainDependsOnInfastructure_ShouldBeTrue() {
            DependencyConstraint constraint = new DependencyConstraint();
    
            JavaPackage distribution = constraint.addPackage("com.distribution");
            JavaPackage domainPackage = constraint.addPackage("com.domain");
            JavaPackage infastructurePackage = constraint.addPackage("com.infrastructure");
    
            distribution.dependsUpon(domainPackage);
            domainPackage.dependsUpon(infastructurePackage);
            jdepend.analyze();
    
            Collection<JavaPackage> actual = new ArrayList<JavaPackage>();
            actual.add(domainPackage);
            actual.add(distribution);
            actual.add(infastructurePackage);
    
            assertEquals("Domain doesn't depend on Infrastructure layer", true, constraint.match(actual));
        }
    
    }
    

    【讨论】:

    • 您是否尝试过domainPackage.dependsUpon(distribution) 来检查测试是否有效?在我看来,测试永远不会失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多