diff --git a/.travis.yml b/.travis.yml
index dd6d057d4a4803bd63a7c5ec8a99c6c9f28c96a0..2ac28de72882006cb49007ab7e55100a7d0175ae 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -27,6 +27,7 @@ addons:
     - autopoint
     - libsqlite3-dev
     - ant
+    - ant-optional
     - libcppunit-dev
     - wget
     - openjdk-8-jdk
@@ -64,7 +65,12 @@ before_script:
 script:
   - javac -version
   - ./bootstrap && ./configure --prefix=/usr && make
-  - pushd bindings/java/ && ant -q dist && popd
+  - pushd bindings/java/ && ant -q dist 
+  # don't run tests on osx; libtsk not present due to SIP on osx: VIK-6971
+  - if test ${TRAVIS_OS_NAME} != "osx"; then
+        ant -q test;
+    fi
+  - popd
   - pushd case-uco/java/ && ant -q && popd
   - make check && if [ -f "tests/test-suite.log" ];then cat tests/test-suite.log; fi ; if [ -f "unit_tests/base/test-suite.log" ];then cat unit_tests/base/test-suite.log; fi
   - if test ${TRAVIS_OS_NAME} = "linux"; then
diff --git a/appveyor.yml b/appveyor.yml
index 18b9612b2c99c200235a364b2232a0bb451b48fb..5afea87227a05d12d7518ea85f4632519ad7d66b 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -7,30 +7,30 @@ cache:
 
 image: Visual Studio 2015
 
-
-install:  
+install:
   - ps: choco install nuget.commandline
   - ps: choco install ant --ignore-dependencies
   - ps: $env:Path="C:\Program Files\Java\jdk1.8.0\bin;$($env:Path);C:\ProgramData\chocolatey\lib\ant"
   - set PATH=C:\Python36-x64\';%PATH%
 environment:
-    global:
-      TSK_HOME: "%APPVEYOR_BUILD_FOLDER%"
-      PYTHON: "C:\\Python36-x64"
-      JDK_HOME: C:\Program Files\Java\jdk1.8.0
+  global:
+    TSK_HOME: "%APPVEYOR_BUILD_FOLDER%"
+    PYTHON: "C:\\Python36-x64"
+    JDK_HOME: C:\Program Files\Java\jdk1.8.0
 services:
 
 before_build:
   - nuget restore win32\libtsk -PackagesDirectory win32\packages
-  
+
 build_script:
-      - python win32\updateAndBuildAll.py -m 
-      - ps: ant -version
-      - ps: pushd bindings/java
-      - cmd: ant -q dist
-      - ps: popd
-      - ps: pushd case-uco/java
-      - cmd: ant -q
-      - ps: popd
+  - python win32\updateAndBuildAll.py -m
+  - ps: ant -version
+  - ps: pushd bindings/java
+  - cmd: ant -q dist
+  - ps: popd
+  - ps: pushd case-uco/java
+  - cmd: ant -q
+  - ps: popd
 
-test: off
+test_script:
+  - cmd: ant -q -f bindings/java test
diff --git a/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java b/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java
index 96684cb857e3c5ba1533b5fa024e7e653cd11326..1add49a71da697538db64aaebca88a9ebcac53a9 100644
--- a/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java
+++ b/bindings/java/test/org/sleuthkit/datamodel/BottomUpTest.java
@@ -77,6 +77,10 @@ public void testBottomUpDiff() {
 			String tempDirPath = dbFile.getAbsolutePath();
 			String dbPath = DataModelTestSuite.buildPath(tempDirPath, title, DataModelTestSuite.BTTMUP, ".db");
 			dbFile.delete();
+			if (dbFile.getParentFile() != null) {
+				dbFile.getParentFile().mkdirs();
+			}
+			
 			SleuthkitCase sk = SleuthkitCase.newCase(dbPath);
 			String timezone = "";
 			title = title + DataModelTestSuite.BTTMUP + ".txt";
diff --git a/bindings/java/test/org/sleuthkit/datamodel/CommunicationsManagerTest.java b/bindings/java/test/org/sleuthkit/datamodel/CommunicationsManagerTest.java
index d2e025b95d3fd6a6b0cc8baf5afe6cf0874934b2..a1c60a251ceffce30b9903dd899e13e18039f8b3 100644
--- a/bindings/java/test/org/sleuthkit/datamodel/CommunicationsManagerTest.java
+++ b/bindings/java/test/org/sleuthkit/datamodel/CommunicationsManagerTest.java
@@ -18,6 +18,7 @@
  */
 package org.sleuthkit.datamodel;
 
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -238,13 +239,15 @@ public CommunicationsManagerTest() {
 	@BeforeClass
 	public static void setUpClass() {
 		String tempDirPath = System.getProperty("java.io.tmpdir");
-		tempDirPath = tempDirPath.substring(0, tempDirPath.length() - 1);
 		try {
-			dbPath = tempDirPath + java.io.File.separator + TEST_DB;
+			dbPath = Paths.get(tempDirPath, TEST_DB).toString();
 
 			// Delete the DB file, in case 
 			java.io.File dbFile = new java.io.File(dbPath);
 			dbFile.delete();
+			if (dbFile.getParentFile() != null) {
+				dbFile.getParentFile().mkdirs();
+			}
 
 			// Create new case db
 			caseDB = SleuthkitCase.newCase(dbPath);
diff --git a/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java b/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java
index 0c22fbd617a741331104c709b3e782f44893c71d..2ec2da48f63072d83262cf107fb7c1375888d298 100644
--- a/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java
+++ b/bindings/java/test/org/sleuthkit/datamodel/DataModelTestSuite.java
@@ -24,6 +24,7 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
+import java.nio.file.Paths;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
@@ -122,6 +123,10 @@ public static void createOutput(String outputPath, String tempDirPath, List<Stri
 			standardFile.createNewFile();
 			java.io.File dbFile = new java.io.File(dbPath);
 			dbFile.delete();
+			if (dbFile.getParentFile() != null) {
+				dbFile.getParentFile().mkdirs();
+			}
+			
 			SleuthkitCase sk = SleuthkitCase.newCase(dbPath);
 
 			String timezone = "";
@@ -228,7 +233,7 @@ private static String stripExtension(String title) {
 	 * @return the path for an output file
 	 */
 	public static String buildPath(String path, String name, String type, String Ext) {
-		return path + java.io.File.separator + name + type + Ext;
+		return Paths.get(path, name + type + Ext).toString();
 	}
 
 	/**