请在下面找到示例源代码,返回: -
网站主页,当auth服务不可用时,
默认主页,当auth服务可用时,但是页面服务是 不可用,
错误页面,当两个服务都不可用时,
用户页面,当所有服务都可用时
package tryeg
import scala.util._
/**
* Created by mogli on 6/6/17.
*/
class TrySample(val service : TryService) {
def homePageForUser(userId: String, secret: String): Try[Page] = {
val tryhomepage = for {
user <- service.authenticate(userId, secret)
homePage <- service.fetchHomePage(user)
} yield homePage
tryhomepage match {
case Failure(e: ServiceUnavailableException) =>
e.service match{
case "AuthService" =>
Try(WebsiteHomePage)
case "PageService" =>
Try(DefaultHomePage)
case _ =>
Try(ErrorPage)
}
case _ =>
tryhomepage
}
}
}
case class User(id: Long)
case class Page(title: String, content: String)
object DefaultHomePage extends Page("Welcome!", "This is your amazing Homepage!")
object WebsiteHomePage extends Page("Welcome!", "This is your amazing website")
object ErrorPage extends Page("Sorry!", "Unhandled Erro")
sealed class MyException(msg: String) extends Exception(msg, null)
case class UnknownUserException(userId: Long) extends MyException(s"User with id [$userId] is unknown.")
case class WrongSecretException(userId: Long) extends MyException(s"User with id [$userId] provided the wrong secret.")
case class ServiceUnavailableException(service: String) extends MyException(s"The Service [$service] is currently unavailable")
trait TryService {
def authenticate(userId: String, secret: String): Try[User]
def fetchHomePage(user: User): Try[Page]
}
另外,在下面的样本单元测试用例中找到: -
package tryeg
import org.junit.runner.RunWith
import org.scalamock.scalatest.MockFactory
import org.scalatest.FlatSpecLike
import org.scalatest.junit.JUnitRunner
import scala.util.Try
/**
* Created by mogli on 6/6/17.
*/
@RunWith(classOf[JUnitRunner])
class TrySampleTest extends FlatSpecLike with MockFactory{
val user = User(123)
val tryuser = Try(user)
val userpage = Page("jbaba", "jbaba ka page")
val tryuserpage = Try(userpage)
"non happy path with authentication service not available" should "return website page" in {
val service = stub[TryService]
( service.authenticate(_, _) ).when("123", "secret") throws ServiceUnavailableException("AuthService")
val trySample = new TrySample(service)
val page = trySample.homePageForUser("123", "secret")
//page should be (Try(WebsiteHomePage))
println("non happy path for authentication service down ")
}
"non happy path with page service not available" should "return default home page" in {
val service = stub[TryService]
( service.authenticate(_, _) ).when("123", "secret") returns (tryuser)
( service.fetchHomePage(_) ).when(user) throws ServiceUnavailableException("PageService")
val trySample = new TrySample(service)
val page = trySample.homePageForUser("123", "secret")
//page should be (Try(DefaultHomePage))
println("non happy path for page service down ")
}
}
现在,第一个测试用例是抛出异常,但预期的结果是Try(WebsiteHomePage)
tryeg.ServiceUnavailableException: The Service [AuthService] is currently unavailable
at tryeg.TrySampleTest$$anonfun$1.apply$mcV$sp(TrySampleTest.scala:31)
at tryeg.TrySampleTest$$anonfun$1.apply(TrySampleTest.scala:29)
at tryeg.TrySampleTest$$anonfun$1.apply(TrySampleTest.scala:29)
答案 0 :(得分:0)
您的TryService
存根正在抛出异常,而不是返回Failure
。