【问题标题】:How to utilize a variable from a different class in a unit testing in Scala?如何在 Scala 的单元测试中利用来自不同类的变量?
【发布时间】:2019-02-28 21:41:20
【问题描述】:

我想在 Scala 的测试文件中使用来自不同类的变量 numberOwned。我该怎么做?

这是我尝试的。

TestEquipment.scala:

package tests
import clicker.equipment._
import org.scalatest._

class TestEquipment extends FunSuite {
    numberOwned = 0
        test("first test"){
    }
}

设备.scala

package clicker.equipment

abstract class Equipment{

var numberOwned = 0
var name: String = ""

def goldPerSecond(): Double

}

文件目录

src
 |_clicker
 |     |_ equipment
 |           |_Equipment.scala
 |_ tests
      |_ TestEquipment.scala

【问题讨论】:

    标签: java scala unit-testing class methods


    【解决方案1】:

    它不取决于它是否在测试中:您需要一个Equipment 的实例。

    class TestEquipment extends FunSuite {
        val equipment: Equipment = ...    
        equipment.numberOwned = 0
    
        test("first test"){ ... }
    }
    

    在 Scala 中,您可以使用 import equipment._ 并直接引用 numberOwned,但这不会改变含义。

    这个实例可以是this,就像 skjagini 的回答一样,但在语义上没有多大意义:你的测试套件是一种设备吗?

    【讨论】:

      【解决方案2】:

      由于您的抽象类没有任何状态,您可以将其转换为 Trait(接口),在 Scala 中,您可以使用如下方法定义接口

      trait Equipment{
      
        var numberOwned = 0
        var name: String = ""
      
        def goldPerSecond(): Double = {
            numberOwned
        }
      }
      
       class TestEquipment extends FunSuite with Equipment {
          this.numberOwned = 0
              test("first test"){
          }
      }
      

      您可以使用 FunSuite 扩展您的 TestEquipment 并实现接口 Equipment。

      如 cmets 中所述,您不能同时从 FunSuite 和 BaseClass 继承。

      【讨论】:

      • 这个答案出现在 SO 中的低质量帖子中,因为它的代码只回答......你能在你的答案中添加任何评论吗?解释你的逻辑,并对你的代码打算做什么做一点评论。这将有助于 OP,但它也将作为未来用户的评论
      • 你能用抽象类代替特征类吗?
      • @Anonymous 那么你不能使用FunSuite(改用FunSuiteLike)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多