[英]How to call implicit functions of scala inside junit test cases?
我正在嘗試在測試用例中調用隱式函數,但是似乎eclipse UI無法識別它,我使用Eclipse-編譯ID:2.1-M2-20121018-1623-Typesafe Eclipse SDK版本:3.7,遇到編譯錯誤。 2
我想念什么嗎?
碼
package com.scala.dsl
object TradeDSL {
abstract class Instrument(name: String) { def instrumentName: String }
case class Stock(name: String) extends Instrument(name) {
override val instrumentName = "EQUITY";
}
case class Bond(name: String) extends Instrument(name) {
override val instrumentName = "BOND";
}
abstract class TransactionType { def value: String}
case class Buy() extends TransactionType {
override val value = "BUY"
}
case class Sell() extends TransactionType {
override val value = "SELL"
}
class PricingStrategy(order: Order) {
def defaultPricing(): Int = order.quantity * order.price
def brokeragePricing(): Int = order.quantity * order.price + 100
}
implicit def orderPricing(order: Order) = new PricingStrategy(order);
case class Order(price: Int = 0, instrument: Instrument = null, quantity: Int = 0, totalValue: Int = 0,trn: TransactionType = null, account: String = null ) {
def maxUnitPrice(p: Int) = copy(price = p)
def to(i: Tuple2[Instrument, Int] ) = copy(instrument = i._1, quantity = i._2)
def buy(qi: Tuple2[Int, Instrument]) = copy(instrument = qi._2, quantity = qi._1, trn = Buy())
def sell(qi: Tuple2[Int, Instrument]) = copy(instrument = qi._2, quantity = qi._1, trn = Sell())
def using(pricing: (Int, Int) => Int) = {
copy(totalValue = pricing(quantity, price))
}
def forAccount(a: String)(implicit pricing: (Int,Int) => Int) = {
copy(account = a, totalValue = pricing(quantity,price))
}
}
}
測試用例
import org.scalatest.FunSuite
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import com.scala.dsl._
import com.scala.dsl.TradeDSL.Bond
import com.scala.dsl.TradeDSL.Stock
import com.scala.dsl.TradeDSL.Buy
import com.scala.dsl.TradeDSL.Sell
import com.scala.dsl.TradeDSL.Order
@RunWith(classOf[JUnitRunner])
class TestTradeDSL extends FunSuite {
test("Order") {
val order1 = new Order()
.buy(10, Stock("GOLD"))
.maxUnitPrice(25)
.brokeragePricing
}
}
我在.brokeragePricing上遇到編譯錯誤我嘗試清理項目並重新啟動Eclipse,但一切都是徒勞的。
問題在於您正在TradeDSL
導入TradeDSL
對象。 您可以通過導入對象的所有元素來修復它:
import com.scala.dsl.TradeDSL._
或通過導入缺少的元素:
import com.scala.dsl.TradeDSL.orderPricing
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.