Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ScalaTest:将场景测试标记为预期失败_Scala_Functional Programming_Scalatest - Fatal编程技术网

ScalaTest:将场景测试标记为预期失败

ScalaTest:将场景测试标记为预期失败,scala,functional-programming,scalatest,Scala,Functional Programming,Scalatest,当使用FeatureSpec进行测试并使用scenario时,我的部分代码发送一个“失败”案例类(即ApplesNotAllowed),并通过scalaz析取使用 快速示例: val result = if (order.value != 10) { -\/(ApplesNotSupported(orderNumber)) } else { \/-Option.empty[Orange] } 在我的测试套件中,我可以很容易地测试接收到选项的情况。空[橙色],方法是期望它

当使用
FeatureSpec
进行测试并使用
scenario
时,我的部分代码发送一个“失败”案例类(即
ApplesNotAllowed
),并通过
scalaz
析取使用

快速示例:

val result = if (order.value != 10) {
    -\/(ApplesNotSupported(orderNumber))
  } else {
    \/-Option.empty[Orange]
  }
在我的测试套件中,我可以很容易地测试接收到
选项的情况。空[橙色]
,方法是期望它
应该为None
。然而,当我想测试正在返回的
ApplesNotSupported
case类时,我确实遇到了一个问题。既然我们希望“失败”发生,那么我怎么能指望这个“失败”会承认测试通过呢?每当我尝试运行我的场景时,我都会得到错误:

Validation is not success ApplesNotSupported(orderNumber)
尝试使用
中断
并不能解决问题,因为这不是一个例外,我们也不想故意使测试失败。使用
scalaz
ScalaTest
会有问题吗


我对函数式编程和Scala中的编程都是相当陌生的,所以任何资源或建议都会有所帮助,因为我在搜索文档时遇到了困难

在测试析取时,您可能希望使用析取匹配器:

这是基于析取结果进行测试的最佳方法。 可以根据析取本身进行匹配:

must be_\/-
must be_-\/
或者更进一步,匹配析取的结果及其包含的值:

must be_\/-(value)
must be_-\/(value)

我个人不使用ScalaTest,但它看起来应该与specs2中的相同。

在测试析取时,您可能希望了解析取匹配器的使用:

这是基于析取结果进行测试的最佳方法。 可以根据析取本身进行匹配:

must be_\/-
must be_-\/
或者更进一步,匹配析取的结果及其包含的值:

must be_\/-(value)
must be_-\/(value)

我个人并不使用ScalaTest,但它看起来应该与specs2中的相同。

我对scalaz或析取都不熟悉,但听起来ScalaTest断言()中的拦截功能可能会有所帮助

您可以使用intercept定义期望的异常类型,并运行将在函数中引发异常的代码。您可以将截距的结果分配给val,然后您可以使用scalatest中的assertassertResult与预期值进行比较


希望这能有所帮助!:)

我对scalaz或析取都不熟悉,但听起来scalatest断言()中的拦截功能可能会有所帮助

您可以使用intercept定义期望的异常类型,并运行将在函数中引发异常的代码。您可以将截距的结果分配给val,然后您可以使用scalatest中的assertassertResult与预期值进行比较


希望这能有所帮助!:)

把它包装起来,试试这样做:

import org.scalatest.{FunSuite, Matchers}
import org.specs2.mock.Mockito

import scala.util.{Failure, Success, Try}

/**
  * Created by ssharma on 4/18/17.
  */
class UnitTest extends FunSuite with Matchers{
     class A {

       def t1(x: Int): Try[Int] = Try(t(x))

       private def t(x: Int): Int = {
         x match {
           case 1 => 1
           case _ => throw new RuntimeException
         }
       }
     }

  test("A") {
    val b = new A
    assert(b.t1(1)isSuccess)
  }

  test("A fail") {
    val b = new A
    assert(b.t1(2)isFailure)
  }
}

把它包起来怎么样?试试这样做:

import org.scalatest.{FunSuite, Matchers}
import org.specs2.mock.Mockito

import scala.util.{Failure, Success, Try}

/**
  * Created by ssharma on 4/18/17.
  */
class UnitTest extends FunSuite with Matchers{
     class A {

       def t1(x: Int): Try[Int] = Try(t(x))

       private def t(x: Int): Int = {
         x match {
           case 1 => 1
           case _ => throw new RuntimeException
         }
       }
     }

  test("A") {
    val b = new A
    assert(b.t1(1)isSuccess)
  }

  test("A fail") {
    val b = new A
    assert(b.t1(2)isFailure)
  }
}

通过析取,您可以对结果进行模式匹配,从而避免涉及不必要的异常。这正是析取匹配器在其实现中所做的:通过析取,您可以对结果进行模式匹配,从而避免不必要的异常。这正是析取匹配器在其实现中所做的:感谢您在参考资料中指出这一点。我没有想到我们也应该使用析取来测试,并且过于专注于看到最终结果。谢谢你在参考资料中指出了这一点。我没有想到我们也应该使用析取来测试,并且过于专注于看到最终结果。