Zdarzyło mi się napotkać wadliwe testy, które w całym moim rozumieniu powinny przejść. Czy brakuje mi czegoś oczywistego, tutaj?Błąd w Scalatest "DoubleTolerance"?
import org.scalatest._
class xxxTests extends FlatSpec with ShouldMatchers {
import math.{Pi => PI}
"" should "(this should pass)" in {
assert(0.0 === 0.0) // ok
(1e-100) should equal ((0.0) plusOrMinus 1e-5) // FAILS!!! "1.0E-100 did not equal DoubleTolerance(0.0,1.0E-5)"
(1e-3) should not equal ((0.0) plusOrMinus 1e-5) // ok
(0.0) should equal ((0.0) plusOrMinus 1e-5) // FAILS!!! "0.0 did not equal DoubleTolerance(0.0,1.0E-5)"
}
}
Doświadczyłem tego zarówno w Scalatest 1.8 i 2.0M4.
No, nie bądź zbyt mocno na siebie. Myślę, że DSL zachęca do tego błędu. Mój oryginalny pomysł polegał na tym, że matchers potrzebowali jakiegoś sposobu, który zawsze oznacza wywoływanie == na dwóch obiektach, i to jest to, co równe. Z wyjątkiem tego, że wywołuje .deep na tablicy po lewej i prawej stronie, więc to wyjątek. Myślę, że "x powinno być równe (y plusOrMinus tol)" wygląda na to, że powinno działać, i widziałem więcej niż jednego użytkownika, spróbuj teraz. Myślę więc, że faktycznie będę obsługiwał tę składnię w najbliższej wersji ScalaTest. Jeśli ktoś naprawdę kiedykolwiek chce porównać dwie tolerancje dla równości, może to zrobić z zapewnieniem. –