fuin.org

Small Open Source Java Tools and Libraries

Asserting package dependencies

It's a good practice enforcing package dependencies to avoid high coupling and package cycles.
 

You simply define a dependency description in your "src/test/resources" folder (Example: "units4j.xml"):

<dependencies>
  
  <alwaysAllowed>
    <dependsOn package="java.lang"/>
    <dependsOn package="java.io"/>
    <dependsOn package="java.util"/>
    <dependsOn package="org.junit"/>
  </alwaysAllowed>
  
  <alwaysForbidden>
    <notDependsOn package="junit.framework"/>
  </alwaysForbidden>
  
  <allowed>
    <package name="org.fuin.units4j">
      <dependsOn package="org.fuin.utils4j"/>
      <dependsOn package="org.fuin.units4j.dependency"/>
    </package>
  </allowed>
  
  <forbidden>
    <package name="org.fuin.units4j.dependency">
      <notDependsOn package="org.fuin.units4j" comment="A package should not depend on it's parent!"/>
    </package>
  </forbidden>
  
</dependencies>

Next you create a test method using the dependency description:
    @Test
    public final void testAssertDependencies() {
        AssertDependencies.assertRules(this.getClass(), "/units4j.xml", new File("target/classes"));
    }