diff --git a/pom.xml b/pom.xml
index 6671c70d..eb23e767 100644
--- a/pom.xml
+++ b/pom.xml
@@ -206,6 +206,7 @@
scalatest-maven-plugin
1.0
+ F
${project.build.directory}/surefire-reports
.
WDF TestSuite.txt
diff --git a/src/test/scala/com/amazon/deequ/VerificationSuiteTest.scala b/src/test/scala/com/amazon/deequ/VerificationSuiteTest.scala
index 73389eb6..a21bfc93 100644
--- a/src/test/scala/com/amazon/deequ/VerificationSuiteTest.scala
+++ b/src/test/scala/com/amazon/deequ/VerificationSuiteTest.scala
@@ -22,10 +22,9 @@ import com.amazon.deequ.anomalydetection.AbsoluteChangeStrategy
import com.amazon.deequ.checks.Check
import com.amazon.deequ.checks.CheckLevel
import com.amazon.deequ.checks.CheckStatus
-import com.amazon.deequ.constraints.Constraint
+import com.amazon.deequ.constraints.{Constraint, ConstraintResult}
import com.amazon.deequ.io.DfsUtils
-import com.amazon.deequ.metrics.DoubleMetric
-import com.amazon.deequ.metrics.Entity
+import com.amazon.deequ.metrics.{DoubleMetric, Entity, Metric}
import com.amazon.deequ.repository.MetricsRepository
import com.amazon.deequ.repository.ResultKey
import com.amazon.deequ.repository.memory.InMemoryMetricsRepository
@@ -849,6 +848,55 @@ class VerificationSuiteTest extends WordSpec with Matchers with SparkContextSpec
assert(checkFailedCompletenessResult.status == CheckStatus.Error)
}
+ "Well-defined checks should produce correct result even if another check throws an exception" in withSparkSession {
+ sparkSession =>
+ val df = getDfWithNameAndAge(sparkSession)
+
+
+ val checkThatShouldSucceed =
+ Check(CheckLevel.Error, "shouldSucceedForValue").isComplete("name")
+
+
+ val checkThatWillThrow = Check(CheckLevel.Error, "shouldThrow")
+ .hasSize(_ => {
+ throw new IllegalArgumentException("borked")
+ })
+
+ val complianceCheckThatShouldSucceed =
+ Check(CheckLevel.Error, "shouldSucceedForAge").isContainedIn("age", 1, 100)
+
+
+ val isCompleteCheckThatShouldFailCompleteness = Check(CheckLevel.Error, "shouldErrorStringType")
+ .isComplete("fake")
+
+ val verificationResult = VerificationSuite()
+ .onData(df)
+ .addCheck(checkThatShouldSucceed)
+ .addCheck(checkThatWillThrow)
+ .addCheck(isCompleteCheckThatShouldFailCompleteness)
+ .addCheck(complianceCheckThatShouldSucceed)
+ .run()
+
+ val checkSuccessResult = verificationResult.checkResults(checkThatShouldSucceed)
+ checkSuccessResult.constraintResults.map(_.message) shouldBe List(None)
+ assert(checkSuccessResult.status == CheckStatus.Success)
+
+ val checkExceptionResult = verificationResult.checkResults(checkThatWillThrow)
+ checkExceptionResult.constraintResults.map(_.message) shouldBe
+ List(Some("Can't execute the assertion: borked!"))
+ assert(checkExceptionResult.status == CheckStatus.Error)
+
+ val checkIsCompleteFailedResult = verificationResult.checkResults(isCompleteCheckThatShouldFailCompleteness)
+ checkIsCompleteFailedResult.constraintResults.map(_.message) shouldBe
+ List(Some("Input data does not include column fake!"))
+ assert(checkIsCompleteFailedResult.status == CheckStatus.Error)
+
+ val checkAgeSuccessResult = verificationResult.checkResults(complianceCheckThatShouldSucceed)
+ checkAgeSuccessResult.constraintResults.map(_.message) shouldBe List(None)
+ assert(checkAgeSuccessResult.status == CheckStatus.Success)
+
+ }
+
"A well-defined completeness check should pass even with a single column" in withSparkSession {
sparkSession =>
val df = getDfWithVariableStringLengthValues(sparkSession)