繁体   English   中英

@VisibleForTesting注释在Scala上的行为

[英]Behavior of @VisibleForTesting annotation on scala

我正在测试添加到构造器标记为私有的scala类中的方法。 可通过单例对象访问该对象,该对象执行许多我不想触摸的其他事情。

class DummyClass private (config: DummyConfig) extends Runnable {

   def refresh() = {
       // Does tons of things
   }

   def updateProperty() = {
      // My method
   }
}

Object DummyClass {
  def apply(config: DummyConfig) = {
     val clss = new DummyClass(config)
     clss.refresh()
     new Thread(clss).start()
     clss
  }
}

在我的JUnit(Specs / Mockito)中,我只想创建该类的对象并测试添加的单个方法,而无需调用刷新或启动线程。

即使我在类DummyClass上添加了番石榴的注解@VisibleForTesting,我也无法在JUnit测试中使用构造函数。 有办法可以实现吗?

@VisibleForTesting批注从哪里来? 是番石榴图书馆提供的吗?

最有可能的是,这只是一个有用的注释,仅用于记录您为方法/构造函数提供了更宽松的可见性的事实,仅允许进行单元测试。

在您的情况下,您必须实际更改构造函数的可见性:

package p

class DummyClass private[p] (config: DummyConfig) extends Runnable {

   def refresh() = {
       // Does tons of things
   }

   def updateProperty() = {
      // My method
   }
}

在这里,如果将单元测试放在包p ,则可以访问构造函数,因为它现在是私有包。 添加注释以指示不允许任何生产代码调用构造函数(但同样,这将取决于从事该项目的其他开发人员的良好行为,编译器将不会基于注释强制执行任何操作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM