39. class AnalysisPurchaseSpec extends AnyFreeSpec
with Matchers
with GivenWhenThen
with EcMatchers {
"Boundary: カートの商品を購入" - {
"店舗在庫を1個購入する" - {
"Main" in {
val service = EcService.createForAnalysis()
Given("EC顧客はログイン済み")
val user = "U123"
And("店舗在庫が存在")
val addstockcmd = AddStockCommand()
service.addStock(addstockcmd)
And("カートに商品を追加")
val addcartcmd = AddCartCommand("P123", 1)
val cart = service.addCart(addcartcmd).get
Then("カートの商品を購入")
val cartid = cart.cartId
val cmd = PurchaseCommand(cartid)
service.purchase(cmd) should successPurchase(cmd)
}
}
}
}
AnalysisPurchaseSpec.scala
40. class AnalysisProductSpec extends AnyFreeSpec
with Matchers
with GivenWhenThen
with ScalaCheckDrivenPropertyChecks
with EcMatchers {
"Boundary: 商品一覧を表示" - {
"商品一覧をデフォルト問い合わせで表示する" - {
"Main" in {
val service = EcService.createForAnalysis()
Given("EC顧客はログイン済み")
val user = "U123"
And("商品を登録")
val addproductcmd = AddProductCommand()
service.addProduct(addproductcmd)
Then("商品一覧を表示")
val productq = ProductQuery()
val products = service.listProducts(productq)
products should successProductList()
}
}
}
}
AnalysisProductSpec.scala
53. case class Product(
id: Product.Id,
name: Product.Name,
price: Money
)
object Product {
case class Id(string: String) extends EntityId
case class Name(name: String) extends NameString
}
Product.scala
58. 参考文献
? The Unified Modeling Language Reference
Manual, 2nd (Rumbaugh他, 2004)
? The Unified Modeling Language User Guide,
2nd (Booch他, 2004)
? The Unified Software Development Process
(Jacobson他, 1999)
? The Object Constraint Language, 2nd (Warmer
他, 2003)
? UML 2 and the Unified Process: Practical
Object-Oriented Analysis and Design (Arlow
他, 2005)
? OMG Unified Modeling Language Version 2.5
(OMG, 2015)
? 上流工程UMLモデリング (浅海, 2008)
? The Essentials of Modern Software
Engineering: Free the Practices from the
Method Prisons! (Jacobson他, 2019)