簡體   English   中英

如何在junit測試用例中調用scala的隱式函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM